/*
(c) Copyright 1998-2000 - Tord Jansson
======================================
This file is part of the BladeEnc MP3 Encoder, based on
ISO's reference code for MPEG Layer 3 compression, and might
contain smaller or larger sections that are directly taken
from ISO's reference code.
All changes to the ISO reference code herein are either
copyrighted by Tord Jansson ([email protected])
or sublicensed to Tord Jansson by a third party.
BladeEnc is free software; you can redistribute this file
and/or modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
------------ Changes ------------
2000-02-15 Pirandot
- reformatted, used 'static', less parameters
2000-12-03 ap
- adapted according to changes to "loop.h"
*/
#ifndef __LOOP_PVT__
#define __LOOP_PVT__
static int outer_loop
(
int max_bits,
frame_params *fr_ps
);
static int needed_bits_for_storing_scalefactors
(
frame_params *fr_ps
);
static void calc_noise (void);
static int loop_break (void);
static int amplify
(
int iteration
);
static int INLINE cutting_crew (FLOAT in);
static void quantize (void);
static void partial_quantize (void);
static int bin_search_StepSize
(
int desired_rate,
double start
);
/* ------------ bit counting -------------------------------------------------------- */
static int count_bits (void);
static int count_bits_short (void);
static int count_bits_long (void);
static void choose_table_long
(
unsigned start,
unsigned end,
unsigned max,
unsigned *table,
unsigned *bit_sum
);
static void choose_table_short
(
unsigned start_sfb,
unsigned end_sfb,
unsigned max,
unsigned *table,
unsigned *bit_sum
);
/* ------------ Huffmania ----------------------------------------------------------- */
static void single_Huffman
(
unsigned start,
unsigned end,
/* unsigned table0, == 1 */
unsigned *choice,
unsigned *sum
);
static void double_Huffman
(
unsigned start,
unsigned end,
unsigned table0, /* 2, 5, 13 */
unsigned table1, /* 3, 6, 15 */
unsigned *choice,
unsigned *sum
);
static void triple_Huffman
(
unsigned start,
unsigned end,
unsigned table0, /* 7, 10 */
unsigned table1, /* 8, 11 */
unsigned table2, /* 9, 12 */
unsigned *choice,
unsigned *sum
);
static void triple_Huffman_2
(
unsigned start,
unsigned end,
/* unsigned table0, == 13 */
/* unsigned table1, == 15 */
/* unsigned table2, == 24 */
unsigned *choice,
unsigned *sum
);
static void double_Huffman_2 /* Escape tables */
(
unsigned start,
unsigned end,
unsigned table0, /* 16... */
unsigned table1, /* 24... */
unsigned *choice,
unsigned *sum
);
/* ------------ the struggle continues ---------------------------------------------- */
static void tiny_single_Huffman
(
unsigned start,
unsigned end,
#if ORG_HUFFMAN_CODING
unsigned table0,
#else
/* unsigned table0, == 1 */
#endif
unsigned *choice,
unsigned *sum
);
static void tiny_double_Huffman
(
unsigned start,
unsigned end,
unsigned table0, /* 2, 5, 13 */
unsigned table1, /* 3, 6, 15 */
unsigned *choice,
unsigned *sum
);
static void tiny_triple_Huffman
(
unsigned start,
unsigned end,
unsigned table0, /* 7, 10 */
unsigned table1, /* 8, 11 */
unsigned table2, /* 9, 12 */
unsigned *choice,
unsigned *sum
);
static void tiny_triple_Huffman_2
(
unsigned start,
unsigned end,
/* unsigned table0, == 13 */
/* unsigned table1, == 15 */
/* unsigned table2, == 24 */
unsigned *choice,
unsigned *sum
);
static void tiny_double_Huffman_2 /* Escape tables */
(
unsigned start,
unsigned end,
unsigned table0, /* 16... */
unsigned table1, /* 24... */
unsigned *choice,
unsigned *sum
);
#endif /* __LOOP_PVT__ */
|