* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include "libavutil/crc.h"
+#include "libavutil/lls.h"
#include "avcodec.h"
#include "bitstream.h"
-#include "crc.h"
#include "dsputil.h"
#include "golomb.h"
-#include "lls.h"
#define FLAC_MAX_CH 8
#define FLAC_MIN_BLOCKSIZE 16
int ch_code;
int samplerate;
int sr_code[2];
- int blocksize;
int max_framesize;
uint32_t frame_count;
FlacFrame frame;
init_put_bits(&pb, header, FLAC_STREAMINFO_SIZE);
/* streaminfo metadata block */
- put_bits(&pb, 16, s->blocksize);
- put_bits(&pb, 16, s->blocksize);
+ put_bits(&pb, 16, s->avctx->frame_size);
+ put_bits(&pb, 16, s->avctx->frame_size);
put_bits(&pb, 24, 0);
put_bits(&pb, 24, s->max_framesize);
put_bits(&pb, 20, s->samplerate);
avctx->frame_size);
return -1;
}
- s->blocksize = avctx->frame_size;
} else {
- s->blocksize = select_blocksize(s->samplerate, s->options.block_time_ms);
- avctx->frame_size = s->blocksize;
+ s->avctx->frame_size = select_blocksize(s->samplerate, s->options.block_time_ms);
}
- av_log(avctx, AV_LOG_DEBUG, " block size: %d\n", s->blocksize);
+ av_log(avctx, AV_LOG_DEBUG, " block size: %d\n", s->avctx->frame_size);
/* set LPC precision */
if(avctx->lpc_coeff_precision > 0) {
}
s->options.lpc_coeff_precision = avctx->lpc_coeff_precision;
} else {
- /* select LPC precision based on block size */
- if( s->blocksize <= 192) s->options.lpc_coeff_precision = 7;
- else if(s->blocksize <= 384) s->options.lpc_coeff_precision = 8;
- else if(s->blocksize <= 576) s->options.lpc_coeff_precision = 9;
- else if(s->blocksize <= 1152) s->options.lpc_coeff_precision = 10;
- else if(s->blocksize <= 2304) s->options.lpc_coeff_precision = 11;
- else if(s->blocksize <= 4608) s->options.lpc_coeff_precision = 12;
- else if(s->blocksize <= 8192) s->options.lpc_coeff_precision = 13;
- else if(s->blocksize <= 16384) s->options.lpc_coeff_precision = 14;
- else s->options.lpc_coeff_precision = 15;
+ /* default LPC precision */
+ s->options.lpc_coeff_precision = 15;
}
av_log(avctx, AV_LOG_DEBUG, " lpc precision: %d\n",
s->options.lpc_coeff_precision);
/* set maximum encoded frame size in verbatim mode */
if(s->channels == 2) {
- s->max_framesize = 14 + ((s->blocksize * 33 + 7) >> 3);
+ s->max_framesize = 14 + ((s->avctx->frame_size * 33 + 7) >> 3);
} else {
- s->max_framesize = 14 + (s->blocksize * s->channels * 2);
+ s->max_framesize = 14 + (s->avctx->frame_size * s->channels * 2);
}
streaminfo = av_malloc(FLAC_STREAMINFO_SIZE);
frame = &s->frame;
for(i=0; i<16; i++) {
- if(s->blocksize == flac_blocksizes[i]) {
+ if(s->avctx->frame_size == flac_blocksizes[i]) {
frame->blocksize = flac_blocksizes[i];
frame->bs_code[0] = i;
frame->bs_code[1] = 0;
}
}
if(i == 16) {
- frame->blocksize = s->blocksize;
+ frame->blocksize = s->avctx->frame_size;
if(frame->blocksize <= 256) {
frame->bs_code[0] = 6;
frame->bs_code[1] = frame->blocksize-1;
}
}
-static void put_sbits(PutBitContext *pb, int bits, int32_t val)
-{
- assert(bits >= 0 && bits <= 31);
-
- put_bits(pb, bits, val & ((1<<bits)-1));
-}
-
static void write_utf8(PutBitContext *pb, uint32_t val)
{
uint8_t tmp;
s = avctx->priv_data;
- s->blocksize = avctx->frame_size;
init_frame(s);
copy_samples(s, samples);
flac_encode_close,
NULL,
.capabilities = CODEC_CAP_SMALL_LAST_FRAME,
+ .sample_fmts = (enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE},
+ .long_name = NULL_IF_CONFIG_SMALL("FLAC (Free Lossless Audio Codec)"),
};