Skip to content

Commit

Permalink
Copy out codecpar
Browse files Browse the repository at this point in the history
  • Loading branch information
longnguyen2004 committed Feb 28, 2025
1 parent a758b78 commit 3e199eb
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 11 deletions.
4 changes: 2 additions & 2 deletions src/media/LibavDecoder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { AV_PIX_FMT_RGBA, AVMEDIA_TYPE_VIDEO } from "@lng2004/libav.js-variant-w
import { libavInstance } from "./LibavInstance.js";
import type LibAV from "@lng2004/libav.js-variant-webcodecs-avf-with-decoders";

export async function createDecoder(id: number, codecpar: number)
export async function createDecoder(id: number, codecpar: LibAV.CodecParameters)
{
let freed = false;
let serializer: Promise<unknown> | null = null
Expand All @@ -26,7 +26,7 @@ export async function createDecoder(id: number, codecpar: number)
const [, c, pkt, frame] = await libav.ff_init_decoder(id, {
codecpar
});
const { width, height, format } = await libav.ff_copyout_codecpar(codecpar);
const { width, height, format } = codecpar;
const [graph, src_ctx, sink_ctx] = await libav.ff_init_filter_graph(
"format=pix_fmts=rgba",
{
Expand Down
20 changes: 11 additions & 9 deletions src/media/LibavDemuxer.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import pDebounce from "p-debounce";
import LibAV from "@lng2004/libav.js-variant-webcodecs-avf-with-decoders";
import LibAV, { type CodecParameters } from "@lng2004/libav.js-variant-webcodecs-avf-with-decoders";
import { libavInstance } from "./LibavInstance.js";
import { Log } from "debug-level";
import { uid } from "uid";
Expand All @@ -15,7 +15,7 @@ import type { Readable } from "node:stream";
type MediaStreamInfoCommon = {
index: number,
codec: AVCodecID,
codecpar: number,
codecpar: CodecParameters,
}
type VideoStreamInfo = MediaStreamInfoCommon & {
width: number,
Expand Down Expand Up @@ -236,25 +236,26 @@ export async function demux(input: Readable) {
cleanup();
throw new Error(`Video codec ${codecName} is not allowed`)
}
const codecpar = await libav.ff_copyout_codecpar(vStream.codecpar);
vInfo = {
index: vStream.index,
codec: vStream.codec_id,
codecpar: vStream.codecpar,
width: await libav.AVCodecParameters_width(vStream.codecpar),
height: await libav.AVCodecParameters_height(vStream.codecpar),
codecpar,
width: codecpar.width ?? 0,
height: codecpar.height ?? 0,
framerate_num: await libav.AVCodecParameters_framerate_num(vStream.codecpar),
framerate_den: await libav.AVCodecParameters_framerate_den(vStream.codecpar),
}
if (vStream.codec_id === AVCodecID.AV_CODEC_ID_H264) {
const { extradata } = await libav.ff_copyout_codecpar(vStream.codecpar);
const { extradata } = codecpar;
vInfo = {
...vInfo,
// biome-ignore lint/style/noNonNullAssertion: will always be non-null for our use case
extradata: parseavcC(Buffer.from(extradata!))
}
}
else if (vStream.codec_id === AVCodecID.AV_CODEC_ID_H265) {
const { extradata } = await libav.ff_copyout_codecpar(vStream.codecpar);
const { extradata } = codecpar;
vInfo = {
...vInfo,
// biome-ignore lint/style/noNonNullAssertion: will always be non-null for our use case
Expand All @@ -271,11 +272,12 @@ export async function demux(input: Readable) {
cleanup();
throw new Error(`Audio codec ${codecName} is not allowed`);
}
const codecpar = await libav.ff_copyout_codecpar(aStream.codecpar);
aInfo = {
index: aStream.index,
codec: aStream.codec_id,
codecpar: aStream.codecpar,
sample_rate: await libav.AVCodecParameters_sample_rate(aStream.codecpar),
codecpar,
sample_rate: codecpar.sample_rate ?? 0
}
loggerFormat.info({
info: aInfo
Expand Down

0 comments on commit 3e199eb

Please sign in to comment.