summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2022-04-24 14:22:18 +0200
committerPaul B Mahol <onemda@gmail.com>2022-04-24 14:26:47 +0200
commit058a1ff9b4cdbd2e1a93acc8bf0365e7d01cc9f4 (patch)
treeb1baaad044f3189e3b17b7a473b0eb7d4b551071 /libavcodec
parent037fa0437d2aead40c1f786c6ad4d343afe0546d (diff)
downloadffmpeg-058a1ff9b4cdbd2e1a93acc8bf0365e7d01cc9f4.tar.gz
avcodec/pcm-blurayenc: set fixed number of samples per packet
Other values are forbidden by specification.
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/pcm-blurayenc.c35
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,
};