avcodec/flac: Move ff_flac_get_max_frame_size() to flacenc.c

It is its only user.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt 2022-08-28 15:21:27 +02:00
parent ff1f5b407d
commit 17b1375965
4 changed files with 35 additions and 36 deletions

View File

@ -347,7 +347,7 @@ OBJS-$(CONFIG_FIC_DECODER) += fic.o
OBJS-$(CONFIG_FITS_DECODER) += fitsdec.o fits.o
OBJS-$(CONFIG_FITS_ENCODER) += fitsenc.o
OBJS-$(CONFIG_FLAC_DECODER) += flacdec.o flacdata.o flacdsp.o flac.o
OBJS-$(CONFIG_FLAC_ENCODER) += flacenc.o flacdata.o flacencdsp.o flac.o
OBJS-$(CONFIG_FLAC_ENCODER) += flacenc.o flacdata.o flacencdsp.o
OBJS-$(CONFIG_FLASHSV_DECODER) += flashsv.o
OBJS-$(CONFIG_FLASHSV_ENCODER) += flashsvenc.o
OBJS-$(CONFIG_FLASHSV2_ENCODER) += flashsv2enc.o

View File

@ -145,27 +145,6 @@ int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb,
return 0;
}
int ff_flac_get_max_frame_size(int blocksize, int ch, int bps)
{
/* Technically, there is no limit to FLAC frame size, but an encoder
should not write a frame that is larger than if verbatim encoding mode
were to be used. */
int count;
count = 16; /* frame header */
count += ch * ((7+bps+7)/8); /* subframe headers */
if (ch == 2) {
/* for stereo, need to account for using decorrelation */
count += (( 2*bps+1) * blocksize + 7) / 8;
} else {
count += ( ch*bps * blocksize + 7) / 8;
}
count += 2; /* frame footer */
return count;
}
int ff_flac_is_extradata_valid(AVCodecContext *avctx,
enum FLACExtradataFormat *format,
uint8_t **streaminfo_start)

View File

@ -109,14 +109,6 @@ int ff_flac_is_extradata_valid(AVCodecContext *avctx,
enum FLACExtradataFormat *format,
uint8_t **streaminfo_start);
/**
* Calculate an estimate for the maximum frame size based on verbatim mode.
* @param blocksize block size, in samples
* @param ch number of channels
* @param bps bits-per-sample
*/
int ff_flac_get_max_frame_size(int blocksize, int ch, int bps);
/**
* Validate and decode a frame header.
* @param avctx AVCodecContext to use as av_log() context

View File

@ -157,6 +157,34 @@ static void write_streaminfo(FlacEncodeContext *s, uint8_t *header)
}
/**
* Calculate an estimate for the maximum frame size based on verbatim mode.
* @param blocksize block size, in samples
* @param ch number of channels
* @param bps bits-per-sample
*/
static int flac_get_max_frame_size(int blocksize, int ch, int bps)
{
/* Technically, there is no limit to FLAC frame size, but an encoder
should not write a frame that is larger than if verbatim encoding mode
were to be used. */
int count;
count = 16; /* frame header */
count += ch * ((7+bps+7)/8); /* subframe headers */
if (ch == 2) {
/* for stereo, need to account for using decorrelation */
count += (( 2*bps+1) * blocksize + 7) / 8;
} else {
count += ( ch*bps * blocksize + 7) / 8;
}
count += 2; /* frame footer */
return count;
}
/**
* Set blocksize based on samplerate.
* Choose the closest predefined blocksize >= BLOCK_TIME_MS milliseconds.
@ -378,9 +406,9 @@ static av_cold int flac_encode_init(AVCodecContext *avctx)
s->max_blocksize = s->avctx->frame_size;
/* set maximum encoded frame size in verbatim mode */
s->max_framesize = ff_flac_get_max_frame_size(s->avctx->frame_size,
s->channels,
s->avctx->bits_per_raw_sample);
s->max_framesize = flac_get_max_frame_size(s->avctx->frame_size,
s->channels,
s->avctx->bits_per_raw_sample);
/* initialize MD5 context */
s->md5ctx = av_md5_alloc();
@ -1353,9 +1381,9 @@ static int flac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
/* change max_framesize for small final frame */
if (frame->nb_samples < s->frame.blocksize) {
s->max_framesize = ff_flac_get_max_frame_size(frame->nb_samples,
s->channels,
avctx->bits_per_raw_sample);
s->max_framesize = flac_get_max_frame_size(frame->nb_samples,
s->channels,
avctx->bits_per_raw_sample);
}
init_frame(s, frame->nb_samples);