node-av 1.3.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/README.md +47 -40
  2. package/binding.gyp +12 -0
  3. package/dist/api/bitstream-filter.d.ts +134 -2
  4. package/dist/api/bitstream-filter.js +200 -2
  5. package/dist/api/bitstream-filter.js.map +1 -1
  6. package/dist/api/decoder.d.ts +261 -105
  7. package/dist/api/decoder.js +384 -171
  8. package/dist/api/decoder.js.map +1 -1
  9. package/dist/api/encoder.d.ts +338 -74
  10. package/dist/api/encoder.js +546 -188
  11. package/dist/api/encoder.js.map +1 -1
  12. package/dist/api/filter-presets.d.ts +479 -1513
  13. package/dist/api/filter-presets.js +1044 -2005
  14. package/dist/api/filter-presets.js.map +1 -1
  15. package/dist/api/filter.d.ts +370 -150
  16. package/dist/api/filter.js +647 -364
  17. package/dist/api/filter.js.map +1 -1
  18. package/dist/api/hardware.d.ts +25 -31
  19. package/dist/api/hardware.js +36 -70
  20. package/dist/api/hardware.js.map +1 -1
  21. package/dist/api/index.d.ts +1 -1
  22. package/dist/api/index.js +1 -1
  23. package/dist/api/index.js.map +1 -1
  24. package/dist/api/io-stream.d.ts +6 -0
  25. package/dist/api/io-stream.js +2 -0
  26. package/dist/api/io-stream.js.map +1 -1
  27. package/dist/api/media-input.d.ts +208 -2
  28. package/dist/api/media-input.js +356 -8
  29. package/dist/api/media-input.js.map +1 -1
  30. package/dist/api/media-output.d.ts +142 -104
  31. package/dist/api/media-output.js +446 -179
  32. package/dist/api/media-output.js.map +1 -1
  33. package/dist/api/pipeline.d.ts +82 -17
  34. package/dist/api/pipeline.js +80 -42
  35. package/dist/api/pipeline.js.map +1 -1
  36. package/dist/api/types.d.ts +24 -57
  37. package/dist/api/utils.js +2 -0
  38. package/dist/api/utils.js.map +1 -1
  39. package/dist/lib/audio-fifo.d.ts +103 -0
  40. package/dist/lib/audio-fifo.js +109 -0
  41. package/dist/lib/audio-fifo.js.map +1 -1
  42. package/dist/lib/binding.d.ts +1 -0
  43. package/dist/lib/binding.js.map +1 -1
  44. package/dist/lib/bitstream-filter-context.d.ts +79 -0
  45. package/dist/lib/bitstream-filter-context.js +83 -0
  46. package/dist/lib/bitstream-filter-context.js.map +1 -1
  47. package/dist/lib/bitstream-filter.d.ts +2 -0
  48. package/dist/lib/bitstream-filter.js +2 -0
  49. package/dist/lib/bitstream-filter.js.map +1 -1
  50. package/dist/lib/codec-context.d.ts +168 -0
  51. package/dist/lib/codec-context.js +178 -0
  52. package/dist/lib/codec-context.js.map +1 -1
  53. package/dist/lib/codec-parameters.d.ts +3 -0
  54. package/dist/lib/codec-parameters.js +3 -0
  55. package/dist/lib/codec-parameters.js.map +1 -1
  56. package/dist/lib/codec-parser.d.ts +6 -0
  57. package/dist/lib/codec-parser.js +6 -0
  58. package/dist/lib/codec-parser.js.map +1 -1
  59. package/dist/lib/codec.d.ts +12 -0
  60. package/dist/lib/codec.js +12 -0
  61. package/dist/lib/codec.js.map +1 -1
  62. package/dist/lib/dictionary.d.ts +18 -2
  63. package/dist/lib/dictionary.js +18 -2
  64. package/dist/lib/dictionary.js.map +1 -1
  65. package/dist/lib/error.d.ts +8 -0
  66. package/dist/lib/error.js +9 -0
  67. package/dist/lib/error.js.map +1 -1
  68. package/dist/lib/filter-context.d.ts +119 -2
  69. package/dist/lib/filter-context.js +119 -0
  70. package/dist/lib/filter-context.js.map +1 -1
  71. package/dist/lib/filter-graph.d.ts +80 -0
  72. package/dist/lib/filter-graph.js +84 -0
  73. package/dist/lib/filter-graph.js.map +1 -1
  74. package/dist/lib/filter-inout.d.ts +1 -0
  75. package/dist/lib/filter-inout.js +1 -0
  76. package/dist/lib/filter-inout.js.map +1 -1
  77. package/dist/lib/filter.d.ts +2 -0
  78. package/dist/lib/filter.js +2 -0
  79. package/dist/lib/filter.js.map +1 -1
  80. package/dist/lib/format-context.d.ts +356 -20
  81. package/dist/lib/format-context.js +375 -23
  82. package/dist/lib/format-context.js.map +1 -1
  83. package/dist/lib/frame.d.ts +84 -1
  84. package/dist/lib/frame.js +96 -0
  85. package/dist/lib/frame.js.map +1 -1
  86. package/dist/lib/hardware-device-context.d.ts +8 -0
  87. package/dist/lib/hardware-device-context.js +8 -0
  88. package/dist/lib/hardware-device-context.js.map +1 -1
  89. package/dist/lib/hardware-frames-context.d.ts +55 -0
  90. package/dist/lib/hardware-frames-context.js +57 -0
  91. package/dist/lib/hardware-frames-context.js.map +1 -1
  92. package/dist/lib/input-format.d.ts +43 -3
  93. package/dist/lib/input-format.js +48 -0
  94. package/dist/lib/input-format.js.map +1 -1
  95. package/dist/lib/io-context.d.ts +212 -0
  96. package/dist/lib/io-context.js +228 -0
  97. package/dist/lib/io-context.js.map +1 -1
  98. package/dist/lib/log.d.ts +2 -0
  99. package/dist/lib/log.js +2 -0
  100. package/dist/lib/log.js.map +1 -1
  101. package/dist/lib/native-types.d.ts +39 -1
  102. package/dist/lib/option.d.ts +90 -0
  103. package/dist/lib/option.js +97 -0
  104. package/dist/lib/option.js.map +1 -1
  105. package/dist/lib/output-format.d.ts +4 -0
  106. package/dist/lib/output-format.js +4 -0
  107. package/dist/lib/output-format.js.map +1 -1
  108. package/dist/lib/packet.d.ts +7 -0
  109. package/dist/lib/packet.js +7 -0
  110. package/dist/lib/packet.js.map +1 -1
  111. package/dist/lib/rational.d.ts +1 -0
  112. package/dist/lib/rational.js +1 -0
  113. package/dist/lib/rational.js.map +1 -1
  114. package/dist/lib/software-resample-context.d.ts +64 -0
  115. package/dist/lib/software-resample-context.js +66 -0
  116. package/dist/lib/software-resample-context.js.map +1 -1
  117. package/dist/lib/software-scale-context.d.ts +98 -0
  118. package/dist/lib/software-scale-context.js +102 -0
  119. package/dist/lib/software-scale-context.js.map +1 -1
  120. package/dist/lib/stream.d.ts +1 -0
  121. package/dist/lib/stream.js +1 -0
  122. package/dist/lib/stream.js.map +1 -1
  123. package/dist/lib/utilities.d.ts +60 -0
  124. package/dist/lib/utilities.js +60 -0
  125. package/dist/lib/utilities.js.map +1 -1
  126. package/package.json +18 -18
  127. package/release_notes.md +0 -29
@@ -1 +1 @@
1
- {"version":3,"file":"decoder.js","sourceRoot":"","sources":["../../src/api/decoder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decoder.js","sourceRoot":"","sources":["../../src/api/decoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAMtF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAM,OAAO,OAAO;IACV,YAAY,CAAe;IAC3B,KAAK,CAAQ;IACb,KAAK,CAAQ;IACb,MAAM,CAAS;IACf,WAAW,GAAG,IAAI,CAAC;IACnB,QAAQ,GAAG,KAAK,CAAC;IACjB,QAAQ,CAA0B;IAE1C;;;;;;;;;;;OAWG;IACH,YAAoB,YAA0B,EAAE,KAAY,EAAE,MAAc,EAAE,QAAiC;QAC7G,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+CG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,UAA0B,EAAE;QAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACxC,CAAC;QAED,8BAA8B;QAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5E,CAAC;QAED,uCAAuC;QACvC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QACxC,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAElC,mCAAmC;QACnC,MAAM,GAAG,GAAG,YAAY,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACZ,YAAY,CAAC,WAAW,EAAE,CAAC;YAC3B,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,iCAAiC,CAAC,CAAC;QACnE,CAAC;QAED,uBAAuB;QACvB,YAAY,CAAC,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC;QAE3C,gBAAgB;QAChB,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAClC,YAAY,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;QAC7C,CAAC;QAED,uDAAuD;QACvD,8DAA8D;QAC9D,iDAAiD;QACjD,MAAM,WAAW,GAAG,KAAK,CAAC,4BAA4B,EAAE,CAAC;QACzD,IAAI,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACpC,YAAY,CAAC,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC5D,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAElF,aAAa;QACb,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACtD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,YAAY,CAAC,WAAW,EAAE,CAAC;YAC3B,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC9F,CAAC;IAED;;;;;;;;;;;OAWG;IACH,IAAI,aAAa;QACf,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;IACxB,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,IAAI,oBAAoB;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,UAAU;QACR,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,4BAA4B,EAAE,CAAC;IACtE,CAAC;IAED;;;;;;;;;;;OAWG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC5C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0CG;IACH,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,yBAAyB;QACzB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC3D,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;YAC3C,8CAA8C;YAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,KAAK,CAAC;YACf,CAAC;YAED,kCAAkC;YAClC,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;gBAC/B,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,UAAU,CAAC,MAAc;QACvB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,yBAAyB;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;YAC3C,8CAA8C;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACjC,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,KAAK,CAAC;YACf,CAAC;YAED,kCAAkC;YAClC,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;gBAC/B,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqDG;IACH,KAAK,CAAC,CAAC,MAAM,CAAC,OAA8B;QAC1C,kBAAkB;QAClB,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,sCAAsC;gBACtC,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBAC7C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACxC,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,KAAK,CAAC;oBACd,CAAC;gBACH,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,yCAAyC;gBACzC,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QAED,kCAAkC;QAClC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACvC,IAAI,CAAC,SAAS;gBAAE,MAAM;YACtB,MAAM,SAAS,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,CAAC,UAAU,CAAC,OAAyB;QACnC,kBAAkB;QAClB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,sCAAsC;gBACtC,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBACtC,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,KAAK,CAAC;oBACd,CAAC;gBACH,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,yCAAyC;gBACzC,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QAED,kCAAkC;QAClC,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC,SAAS;gBAAE,MAAM;YACtB,MAAM,SAAS,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,2BAA2B;QAC3B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACnC,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;gBAC3B,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,SAAS;QACP,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,2BAA2B;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACnC,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;gBAC3B,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,KAAK,CAAC,CAAC,WAAW;QAChB,oBAAoB;QACpB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAEnB,IAAI,KAAK,CAAC;QACV,OAAO,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/C,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,CAAC,eAAe;QACd,oBAAoB;QACpB,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjB,IAAI,KAAK,CAAC;QACV,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;YAC7C,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,KAAK,CAAC,OAAO;QACX,4BAA4B;QAC5B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAEnB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE7D,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;YACd,qCAAqC;YACrC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;aAAM,IAAI,GAAG,KAAK,cAAc,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACzD,kCAAkC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,CAAC;YACN,QAAQ;YACR,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,WAAW;QACT,4BAA4B;QAC5B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAEnB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE3D,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;YACd,qCAAqC;YACrC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;aAAM,IAAI,GAAG,KAAK,cAAc,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACzD,kCAAkC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,CAAC;YACN,QAAQ;YACR,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAClB,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;QAEhC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED;;;;;;;;;;;OAWG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;;;;;;;;OAWG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,eAAe;QACb,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;IACvE,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,CAAC,MAAM,CAAC,OAAO,CAAC;QACd,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;CACF"}
@@ -2,7 +2,7 @@ import { Codec, CodecContext, Packet } from '../lib/index.js';
2
2
  import type { AVCodecID } from '../constants/constants.js';
3
3
  import type { FFEncoderCodec } from '../constants/encoders.js';
4
4
  import type { Frame } from '../lib/index.js';
5
- import type { EncoderOptions, StreamInfo } from './types.js';
5
+ import type { EncoderOptions } from './types.js';
6
6
  /**
7
7
  * High-level encoder for audio and video streams.
8
8
  *
@@ -39,17 +39,18 @@ import type { EncoderOptions, StreamInfo } from './types.js';
39
39
  *
40
40
  * @example
41
41
  * ```typescript
42
- * // Hardware-accelerated encoding
42
+ * // Hardware-accelerated encoding with lazy initialization
43
43
  * import { HardwareContext } from 'node-av/api';
44
- * import { AV_HWDEVICE_TYPE_CUDA } from 'node-av/constants';
44
+ * import { FF_ENCODER_H264_VIDEOTOOLBOX } from 'node-av/constants';
45
45
  *
46
- * const hw = HardwareContext.create(AV_HWDEVICE_TYPE_CUDA);
47
- * const encoder = await Encoder.create('h264_nvenc', streamInfo, {
48
- * hardware: hw,
46
+ * const hw = HardwareContext.auto();
47
+ * const encoderCodec = hw?.getEncoderCodec('h264') ?? FF_ENCODER_H264_VIDEOTOOLBOX;
48
+ * const encoder = await Encoder.create(encoderCodec, {
49
+ * timeBase: video.timeBase,
49
50
  * bitrate: '10M'
50
51
  * });
51
52
  *
52
- * // Frames with hw_frames_ctx will be encoded on GPU
53
+ * // Hardware context will be detected from first frame's hw_frames_ctx
53
54
  * for await (const packet of encoder.packets(frames)) {
54
55
  * await output.writePacket(packet);
55
56
  * packet.free();
@@ -64,12 +65,16 @@ export declare class Encoder implements Disposable {
64
65
  private codecContext;
65
66
  private packet;
66
67
  private codec;
67
- private isOpen;
68
- private hardware?;
68
+ private initialized;
69
+ private isClosed;
70
+ private opts?;
69
71
  /**
70
72
  * @param codecContext - Configured codec context
73
+ *
71
74
  * @param codec - Encoder codec
72
- * @param hardware - Optional hardware context
75
+ *
76
+ * @param opts - Encoder options as Dictionary
77
+ *
73
78
  * @internal
74
79
  */
75
80
  private constructor();
@@ -77,25 +82,26 @@ export declare class Encoder implements Disposable {
77
82
  * Create an encoder with specified codec and options.
78
83
  *
79
84
  * Initializes an encoder with the appropriate codec and configuration.
80
- * Automatically configures parameters based on input stream info.
81
- * Handles hardware acceleration setup if provided.
85
+ * Uses lazy initialization - encoder is opened when first frame is received.
86
+ * Hardware context will be automatically detected from first frame if not provided.
82
87
  *
83
88
  * Direct mapping to avcodec_find_encoder_by_name() or avcodec_find_encoder().
84
89
  *
85
90
  * @param encoderCodec - Codec name, ID, or instance to use for encoding
86
- * @param input - Stream information to configure encoder
87
- * @param options - Encoder configuration options
91
+ *
92
+ * @param options - Encoder configuration options including required timeBase
93
+ *
88
94
  * @returns Configured encoder instance
89
95
  *
90
- * @throws {Error} If encoder not found or unsupported format
96
+ * @throws {Error} If encoder not found or timeBase not provided
91
97
  *
92
- * @throws {FFmpegError} If codec initialization fails
98
+ * @throws {FFmpegError} If codec allocation fails
93
99
  *
94
100
  * @example
95
101
  * ```typescript
96
102
  * // From decoder stream info
97
- * const streamInfo = decoder.getOutputStreamInfo();
98
- * const encoder = await Encoder.create(FF_ENCODER_LIBX264, streamInfo, {
103
+ * const encoder = await Encoder.create(FF_ENCODER_LIBX264, {
104
+ * timeBase: video.timeBase,
99
105
  * bitrate: '5M',
100
106
  * gopSize: 60,
101
107
  * options: {
@@ -109,12 +115,7 @@ export declare class Encoder implements Disposable {
109
115
  * ```typescript
110
116
  * // With custom stream info
111
117
  * const encoder = await Encoder.create(FF_ENCODER_AAC, {
112
- * type: 'audio',
113
- * sampleRate: 48000,
114
- * sampleFormat: AV_SAMPLE_FMT_FLTP,
115
- * channelLayout: AV_CH_LAYOUT_STEREO,
116
- * timeBase: { num: 1, den: 48000 }
117
- * }, {
118
+ * timeBase: audio.timeBase,
118
119
  * bitrate: '192k'
119
120
  * });
120
121
  * ```
@@ -123,16 +124,16 @@ export declare class Encoder implements Disposable {
123
124
  * ```typescript
124
125
  * // Hardware encoder
125
126
  * const hw = HardwareContext.auto();
126
- * const encoder = await Encoder.create('hevc_videotoolbox', streamInfo, {
127
- * hardware: hw,
127
+ * const encoderCodec = hw?.getEncoderCodec('h264') ?? FF_ENCODER_H264_VIDEOTOOLBOX;
128
+ * const encoder = await Encoder.create(encoderCodec, {
129
+ * timeBase: video.timeBase,
128
130
  * bitrate: '8M'
129
131
  * });
130
132
  * ```
131
133
  *
132
- * @see {@link Decoder.getOutputStreamInfo} For stream info source
133
134
  * @see {@link EncoderOptions} For configuration options
134
135
  */
135
- static create(encoderCodec: FFEncoderCodec | AVCodecID | Codec, input: StreamInfo, options?: EncoderOptions): Promise<Encoder>;
136
+ static create(encoderCodec: FFEncoderCodec | AVCodecID | Codec, options: EncoderOptions): Promise<Encoder>;
136
137
  /**
137
138
  * Check if encoder is open.
138
139
  *
@@ -144,6 +145,22 @@ export declare class Encoder implements Disposable {
144
145
  * ```
145
146
  */
146
147
  get isEncoderOpen(): boolean;
148
+ /**
149
+ * Check if encoder has been initialized.
150
+ *
151
+ * Returns true after first frame has been processed and encoder opened.
152
+ * Useful for checking if encoder has received frame properties.
153
+ *
154
+ * @returns true if encoder has been initialized with frame data
155
+ *
156
+ * @example
157
+ * ```typescript
158
+ * if (!encoder.isEncoderInitialized) {
159
+ * console.log('Encoder will initialize on first frame');
160
+ * }
161
+ * ```
162
+ */
163
+ get isEncoderInitialized(): boolean;
147
164
  /**
148
165
  * Check if encoder uses hardware acceleration.
149
166
  *
@@ -159,16 +176,30 @@ export declare class Encoder implements Disposable {
159
176
  * @see {@link HardwareContext} For hardware setup
160
177
  */
161
178
  isHardware(): boolean;
179
+ /**
180
+ * Check if encoder is ready for processing.
181
+ *
182
+ * @returns true if initialized and ready
183
+ *
184
+ * @example
185
+ * ```typescript
186
+ * if (encoder.isReady()) {
187
+ * const packet = await encoder.encode(frame);
188
+ * }
189
+ * ```
190
+ */
191
+ isReady(): boolean;
162
192
  /**
163
193
  * Encode a frame to a packet.
164
194
  *
165
195
  * Sends a frame to the encoder and attempts to receive an encoded packet.
196
+ * On first frame, automatically initializes encoder with frame properties.
166
197
  * Handles internal buffering - may return null if more frames needed.
167
- * Automatically manages encoder state and hardware context binding.
168
198
  *
169
199
  * Direct mapping to avcodec_send_frame() and avcodec_receive_packet().
170
200
  *
171
201
  * @param frame - Raw frame to encode (or null to flush)
202
+ *
172
203
  * @returns Encoded packet or null if more data needed
173
204
  *
174
205
  * @throws {Error} If encoder is closed
@@ -202,6 +233,50 @@ export declare class Encoder implements Disposable {
202
233
  * @see {@link flush} For end-of-stream handling
203
234
  */
204
235
  encode(frame: Frame | null): Promise<Packet | null>;
236
+ /**
237
+ * Encode a frame to a packet synchronously.
238
+ * Synchronous version of encode.
239
+ *
240
+ * Sends a frame to the encoder and attempts to receive an encoded packet.
241
+ * On first frame, automatically initializes encoder with frame properties.
242
+ * Handles internal buffering - may return null if more frames needed.
243
+ *
244
+ * Direct mapping to avcodec_send_frame() and avcodec_receive_packet().
245
+ *
246
+ * @param frame - Raw frame to encode (or null to flush)
247
+ *
248
+ * @returns Encoded packet or null if more data needed
249
+ *
250
+ * @throws {Error} If encoder is closed
251
+ *
252
+ * @throws {FFmpegError} If encoding fails
253
+ *
254
+ * @example
255
+ * ```typescript
256
+ * const packet = encoder.encodeSync(frame);
257
+ * if (packet) {
258
+ * console.log(`Encoded packet with PTS: ${packet.pts}`);
259
+ * output.writePacketSync(packet);
260
+ * packet.free();
261
+ * }
262
+ * ```
263
+ *
264
+ * @example
265
+ * ```typescript
266
+ * // Encode loop
267
+ * for (const frame of decoder.framesSync(packets)) {
268
+ * const packet = encoder.encodeSync(frame);
269
+ * if (packet) {
270
+ * output.writePacketSync(packet);
271
+ * packet.free();
272
+ * }
273
+ * frame.free();
274
+ * }
275
+ * ```
276
+ *
277
+ * @see {@link encode} For async version
278
+ */
279
+ encodeSync(frame: Frame | null): Packet | null;
205
280
  /**
206
281
  * Encode frame stream to packet stream.
207
282
  *
@@ -211,7 +286,9 @@ export declare class Encoder implements Disposable {
211
286
  * Primary interface for stream-based encoding.
212
287
  *
213
288
  * @param frames - Async iterable of frames (freed automatically)
214
- * @yields Encoded packets (caller must free)
289
+ *
290
+ * @yields {Packet} Encoded packets (caller must free)
291
+ *
215
292
  * @throws {Error} If encoder is closed
216
293
  *
217
294
  * @throws {FFmpegError} If encoding fails
@@ -230,11 +307,11 @@ export declare class Encoder implements Disposable {
230
307
  * // With frame filtering
231
308
  * async function* filteredFrames() {
232
309
  * for await (const frame of decoder.frames(input.packets())) {
233
- * await filter.filterFrame(frame);
234
- * const filtered = await filter.getFrame();
310
+ * const filtered = await filter.process(frame);
235
311
  * if (filtered) {
236
312
  * yield filtered;
237
313
  * }
314
+ * frame.free();
238
315
  * }
239
316
  * }
240
317
  *
@@ -263,23 +340,70 @@ export declare class Encoder implements Disposable {
263
340
  */
264
341
  packets(frames: AsyncIterable<Frame>): AsyncGenerator<Packet>;
265
342
  /**
266
- * Flush encoder and get buffered packet.
343
+ * Encode frame stream to packet stream synchronously.
344
+ * Synchronous version of packets.
267
345
  *
268
- * Signals end-of-stream and retrieves remaining packets.
269
- * Call repeatedly until null to get all buffered packets.
270
- * Essential for ensuring all frames are encoded.
346
+ * High-level sync generator for complete encoding pipeline.
347
+ * Automatically manages frame memory, encoder state,
348
+ * and flushes buffered packets at end.
349
+ * Primary interface for stream-based encoding.
271
350
  *
272
- * Direct mapping to avcodec_send_frame(NULL).
351
+ * @param frames - Iterable of frames (freed automatically)
273
352
  *
274
- * @returns Buffered packet or null if none remaining
353
+ * @yields {Packet} Encoded packets (caller must free)
275
354
  *
276
355
  * @throws {Error} If encoder is closed
277
356
  *
357
+ * @throws {FFmpegError} If encoding fails
358
+ *
278
359
  * @example
279
360
  * ```typescript
280
- * // Flush remaining packets
361
+ * // Basic encoding pipeline
362
+ * for (const packet of encoder.packetsSync(decoder.framesSync(packets))) {
363
+ * output.writePacketSync(packet);
364
+ * packet.free(); // Must free output packets
365
+ * }
366
+ * ```
367
+ *
368
+ * @example
369
+ * ```typescript
370
+ * // With frame filtering
371
+ * function* filteredFrames() {
372
+ * for (const frame of decoder.framesSync(packets)) {
373
+ * const filtered = filter.processSync(frame);
374
+ * if (filtered) {
375
+ * yield filtered;
376
+ * }
377
+ * frame.free();
378
+ * }
379
+ * }
380
+ *
381
+ * for (const packet of encoder.packetsSync(filteredFrames())) {
382
+ * output.writePacketSync(packet);
383
+ * packet.free();
384
+ * }
385
+ * ```
386
+ *
387
+ * @see {@link packets} For async version
388
+ */
389
+ packetsSync(frames: Iterable<Frame>): Generator<Packet>;
390
+ /**
391
+ * Flush encoder and signal end-of-stream.
392
+ *
393
+ * Sends null frame to encoder to signal end-of-stream.
394
+ * Does nothing if encoder was never initialized or is closed.
395
+ * Must call receive() to get remaining buffered packets.
396
+ *
397
+ * Direct mapping to avcodec_send_frame(NULL).
398
+ *
399
+ * @example
400
+ * ```typescript
401
+ * // Signal end of stream
402
+ * await encoder.flush();
403
+ *
404
+ * // Then get remaining packets
281
405
  * let packet;
282
- * while ((packet = await encoder.flush()) !== null) {
406
+ * while ((packet = await encoder.receive()) !== null) {
283
407
  * console.log('Got buffered packet');
284
408
  * await output.writePacket(packet);
285
409
  * packet.free();
@@ -287,18 +411,44 @@ export declare class Encoder implements Disposable {
287
411
  * ```
288
412
  *
289
413
  * @see {@link flushPackets} For async iteration
290
- * @see {@link packets} For complete encoding pipeline
414
+ * @see {@link receive} For getting buffered packets
291
415
  */
292
- flush(): Promise<Packet | null>;
416
+ flush(): Promise<void>;
417
+ /**
418
+ * Flush encoder and signal end-of-stream synchronously.
419
+ * Synchronous version of flush.
420
+ *
421
+ * Sends null frame to encoder to signal end-of-stream.
422
+ * Does nothing if encoder was never initialized or is closed.
423
+ * Must call receiveSync() to get remaining buffered packets.
424
+ *
425
+ * Direct mapping to avcodec_send_frame(NULL).
426
+ *
427
+ * @example
428
+ * ```typescript
429
+ * // Signal end of stream
430
+ * encoder.flushSync();
431
+ *
432
+ * // Then get remaining packets
433
+ * let packet;
434
+ * while ((packet = encoder.receiveSync()) !== null) {
435
+ * console.log('Got buffered packet');
436
+ * output.writePacketSync(packet);
437
+ * packet.free();
438
+ * }
439
+ * ```
440
+ *
441
+ * @see {@link flush} For async version
442
+ */
443
+ flushSync(): void;
293
444
  /**
294
445
  * Flush all buffered packets as async generator.
295
446
  *
296
447
  * Convenient async iteration over remaining packets.
297
- * Automatically handles repeated flush calls.
298
- * Useful for end-of-stream processing.
448
+ * Automatically handles flush and repeated receive calls.
449
+ * Returns immediately if encoder was never initialized or is closed.
299
450
  *
300
- * @yields Buffered packets
301
- * @throws {Error} If encoder is closed
451
+ * @yields {Packet} Buffered packets
302
452
  *
303
453
  * @example
304
454
  * ```typescript
@@ -310,21 +460,121 @@ export declare class Encoder implements Disposable {
310
460
  * }
311
461
  * ```
312
462
  *
313
- * @see {@link flush} For single packet flush
463
+ * @see {@link flush} For signaling end-of-stream
314
464
  * @see {@link packets} For complete pipeline
315
465
  */
316
466
  flushPackets(): AsyncGenerator<Packet>;
467
+ /**
468
+ * Flush all buffered packets as generator synchronously.
469
+ * Synchronous version of flushPackets.
470
+ *
471
+ * Convenient sync iteration over remaining packets.
472
+ * Automatically handles flush and repeated receive calls.
473
+ * Returns immediately if encoder was never initialized or is closed.
474
+ *
475
+ * @yields {Packet} Buffered packets
476
+ *
477
+ * @example
478
+ * ```typescript
479
+ * // Flush at end of encoding
480
+ * for (const packet of encoder.flushPacketsSync()) {
481
+ * console.log('Processing buffered packet');
482
+ * output.writePacketSync(packet);
483
+ * packet.free();
484
+ * }
485
+ * ```
486
+ *
487
+ * @see {@link flushPackets} For async version
488
+ */
489
+ flushPacketsSync(): Generator<Packet>;
490
+ /**
491
+ * Receive packet from encoder.
492
+ *
493
+ * Gets encoded packets from the codec's internal buffer.
494
+ * Handles packet cloning and error checking.
495
+ * Returns null if encoder is closed, not initialized, or no packets available.
496
+ * Call repeatedly until null to drain all buffered packets.
497
+ *
498
+ * Direct mapping to avcodec_receive_packet().
499
+ *
500
+ * @returns Cloned packet or null if no packets available
501
+ *
502
+ * @throws {FFmpegError} If receive fails with error other than AVERROR_EAGAIN or AVERROR_EOF
503
+ *
504
+ * @example
505
+ * ```typescript
506
+ * const packet = await encoder.receive();
507
+ * if (packet) {
508
+ * console.log(`Got packet with PTS: ${packet.pts}`);
509
+ * await output.writePacket(packet);
510
+ * packet.free();
511
+ * }
512
+ * ```
513
+ *
514
+ * @example
515
+ * ```typescript
516
+ * // Drain all buffered packets
517
+ * let packet;
518
+ * while ((packet = await encoder.receive()) !== null) {
519
+ * console.log(`Packet size: ${packet.size}`);
520
+ * await output.writePacket(packet);
521
+ * packet.free();
522
+ * }
523
+ * ```
524
+ *
525
+ * @see {@link encode} For sending frames and receiving packets
526
+ * @see {@link flush} For signaling end-of-stream
527
+ */
528
+ receive(): Promise<Packet | null>;
529
+ /**
530
+ * Receive packet from encoder synchronously.
531
+ * Synchronous version of receive.
532
+ *
533
+ * Gets encoded packets from the codec's internal buffer.
534
+ * Handles packet cloning and error checking.
535
+ * Returns null if encoder is closed, not initialized, or no packets available.
536
+ * Call repeatedly until null to drain all buffered packets.
537
+ *
538
+ * Direct mapping to avcodec_receive_packet().
539
+ *
540
+ * @returns Cloned packet or null if no packets available
541
+ *
542
+ * @throws {FFmpegError} If receive fails with error other than AVERROR_EAGAIN or AVERROR_EOF
543
+ *
544
+ * @example
545
+ * ```typescript
546
+ * const packet = encoder.receiveSync();
547
+ * if (packet) {
548
+ * console.log(`Got packet with PTS: ${packet.pts}`);
549
+ * output.writePacketSync(packet);
550
+ * packet.free();
551
+ * }
552
+ * ```
553
+ *
554
+ * @example
555
+ * ```typescript
556
+ * // Drain all buffered packets
557
+ * let packet;
558
+ * while ((packet = encoder.receiveSync()) !== null) {
559
+ * console.log(`Packet size: ${packet.size}`);
560
+ * output.writePacketSync(packet);
561
+ * packet.free();
562
+ * }
563
+ * ```
564
+ *
565
+ * @see {@link receive} For async version
566
+ */
567
+ receiveSync(): Packet | null;
317
568
  /**
318
569
  * Close encoder and free resources.
319
570
  *
320
571
  * Releases codec context and internal packet buffer.
321
572
  * Safe to call multiple times.
322
- * Does NOT dispose hardware context - caller is responsible.
323
573
  * Automatically called by Symbol.dispose.
324
574
  *
325
575
  * @example
326
576
  * ```typescript
327
- * const encoder = await Encoder.create(FF_ENCODER_LIBX264, streamInfo);
577
+ * const encoder = await Encoder.create(FF_ENCODER_LIBX264, { ... });
328
578
  * try {
329
579
  * // Use encoder
330
580
  * } finally {
@@ -336,49 +586,63 @@ export declare class Encoder implements Disposable {
336
586
  */
337
587
  close(): void;
338
588
  /**
339
- * Get encoder codec.
589
+ * Initialize encoder from first frame.
340
590
  *
341
- * Returns the codec used by this encoder.
342
- * Useful for checking codec capabilities and properties.
591
+ * Sets codec context parameters from frame properties.
592
+ * Configures hardware context if present in frame.
593
+ * Opens encoder with accumulated options.
343
594
  *
344
- * @returns Codec instance
595
+ * @param frame - First frame to encode
345
596
  *
346
- * @example
347
- * ```typescript
348
- * const codec = encoder.getCodec();
349
- * console.log(`Using codec: ${codec.name}`);
350
- * console.log(`Capabilities: ${codec.capabilities}`);
351
- * ```
597
+ * @throws {FFmpegError} If encoder open fails
352
598
  *
353
- * @see {@link Codec} For codec properties
599
+ * @internal
354
600
  */
355
- getCodec(): Codec;
601
+ private initialize;
356
602
  /**
357
- * Get underlying codec context.
603
+ * Initialize encoder from first frame synchronously.
604
+ * Synchronous version of initialize.
605
+ *
606
+ * Sets codec context parameters from frame properties.
607
+ * Configures hardware context if present in frame.
608
+ * Opens encoder with accumulated options.
358
609
  *
359
- * Returns the internal codec context for advanced operations.
360
- * Returns null if encoder is closed.
610
+ * @param frame - First frame to encode
361
611
  *
362
- * @returns Codec context or null
612
+ * @throws {FFmpegError} If encoder open fails
363
613
  *
364
614
  * @internal
615
+ *
616
+ * @see {@link initialize} For async version
365
617
  */
366
- getCodecContext(): CodecContext | null;
618
+ private initializeSync;
367
619
  /**
368
- * Receive packet from encoder.
620
+ * Get encoder codec.
369
621
  *
370
- * Internal method to get encoded packets from codec.
371
- * Handles packet cloning and error checking.
622
+ * Returns the codec used by this encoder.
623
+ * Useful for checking codec capabilities and properties.
372
624
  *
373
- * Direct mapping to avcodec_receive_packet().
625
+ * @returns Codec instance
374
626
  *
375
- * @returns Cloned packet or null
627
+ * @internal
376
628
  *
377
- * @throws {FFmpegError} If receive fails with error other than AVERROR_EAGAIN or AVERROR_EOF
629
+ * @see {@link Codec} For codec details
630
+ */
631
+ getCodec(): Codec;
632
+ /**
633
+ * Get underlying codec context.
634
+ *
635
+ * Returns the codec context for advanced operations.
636
+ * Useful for accessing low-level codec properties and settings.
637
+ * Returns null if encoder is closed or not initialized.
638
+ *
639
+ * @returns Codec context or null if closed/not initialized
378
640
  *
379
641
  * @internal
642
+ *
643
+ * @see {@link CodecContext} For context details
380
644
  */
381
- private receivePacket;
645
+ getCodecContext(): CodecContext | null;
382
646
  /**
383
647
  * Dispose of encoder.
384
648
  *
@@ -388,7 +652,7 @@ export declare class Encoder implements Disposable {
388
652
  * @example
389
653
  * ```typescript
390
654
  * {
391
- * using encoder = await Encoder.create(FF_ENCODER_LIBX264, streamInfo);
655
+ * using encoder = await Encoder.create(FF_ENCODER_LIBX264, { ... });
392
656
  * // Encode frames...
393
657
  * } // Automatically closed
394
658
  * ```