diff options
author | Paul B Mahol <onemda@gmail.com> | 2022-04-24 14:22:18 +0200 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2022-04-24 14:26:47 +0200 |
commit | 058a1ff9b4cdbd2e1a93acc8bf0365e7d01cc9f4 (patch) | |
tree | b1baaad044f3189e3b17b7a473b0eb7d4b551071 /libavcodec/pcm-blurayenc.c | |
parent | 037fa0437d2aead40c1f786c6ad4d343afe0546d (diff) | |
download | ffmpeg-058a1ff9b4cdbd2e1a93acc8bf0365e7d01cc9f4.tar.gz |
avcodec/pcm-blurayenc: set fixed number of samples per packet
Other values are forbidden by specification.
Diffstat (limited to 'libavcodec/pcm-blurayenc.c')
-rw-r--r-- | libavcodec/pcm-blurayenc.c | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/libavcodec/pcm-blurayenc.c b/libavcodec/pcm-blurayenc.c index 99886e8c37..62c5dacdec 100644 --- a/libavcodec/pcm-blurayenc.c +++ b/libavcodec/pcm-blurayenc.c @@ -33,34 +33,40 @@ static av_cold int pcm_bluray_encode_init(AVCodecContext *avctx) { BlurayPCMEncContext *s = avctx->priv_data; uint8_t ch_layout; - int quant, freq; + int quant, freq, frame_size; + + switch (avctx->sample_fmt) { + case AV_SAMPLE_FMT_S16: + avctx->bits_per_coded_sample = 16; + frame_size = 120; + quant = 1; + break; + case AV_SAMPLE_FMT_S32: + frame_size = 180; + avctx->bits_per_coded_sample = 24; + quant = 3; + break; + default: + return AVERROR_BUG; + } switch (avctx->sample_rate) { case 48000: freq = 1; break; case 96000: + frame_size *= 2; freq = 4; break; case 192000: + frame_size *= 4; freq = 5; break; default: return AVERROR_BUG; } - switch (avctx->sample_fmt) { - case AV_SAMPLE_FMT_S16: - avctx->bits_per_coded_sample = 16; - quant = 1; - break; - case AV_SAMPLE_FMT_S32: - avctx->bits_per_coded_sample = 24; - quant = 3; - break; - default: - return AVERROR_BUG; - } + frame_size *= avctx->ch_layout.nb_channels; switch (avctx->ch_layout.u.mask) { case AV_CH_LAYOUT_MONO: @@ -98,6 +104,7 @@ static av_cold int pcm_bluray_encode_init(AVCodecContext *avctx) } s->header = (((ch_layout << 4) | freq) << 8) | (quant << 6); + avctx->frame_size = frame_size; return 0; } @@ -308,5 +315,5 @@ const FFCodec ff_pcm_bluray_encoder = { .p.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_NONE }, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, - .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_VARIABLE_FRAME_SIZE, + .p.capabilities = AV_CODEC_CAP_DR1, }; |