summaryrefslogtreecommitdiffstats
path: root/libtoolame-dab/common.c
diff options
context:
space:
mode:
Diffstat (limited to 'libtoolame-dab/common.c')
-rw-r--r--libtoolame-dab/common.c188
1 files changed, 188 insertions, 0 deletions
diff --git a/libtoolame-dab/common.c b/libtoolame-dab/common.c
new file mode 100644
index 0000000..e1c5407
--- /dev/null
+++ b/libtoolame-dab/common.c
@@ -0,0 +1,188 @@
+
+/***********************************************************************
+*
+* Global Include Files
+*
+***********************************************************************/
+#include <stdio.h>
+#include <string.h> /* 1995-07-11 shn */
+#include <ctype.h>
+#include <stdlib.h>
+#include "common.h"
+#include "options.h"
+#include "encode_new.h"
+#include "tables.h"
+
+/***********************************************************************
+*
+* Global Variable Definitions
+*
+***********************************************************************/
+
+char *mode_names[4] = { "stereo", "j-stereo", "dual-ch", "single-ch" };
+char *version_names[2] = { "MPEG-2 LSF", "MPEG-1" };
+
+/* 1: MPEG-1, 0: MPEG-2 LSF, 1995-07-11 shn */
+double s_freq[2][4] = { {22.05, 24, 16, 0}, {44.1, 48, 32, 0} };
+
+/* 1: MPEG-1, 0: MPEG-2 LSF, 1995-07-11 shn */
+int bitrate[2][15] = {
+ {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160},
+ {0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384}
+};
+
+double multiple[64] = {
+ 2.00000000000000, 1.58740105196820, 1.25992104989487,
+ 1.00000000000000, 0.79370052598410, 0.62996052494744, 0.50000000000000,
+ 0.39685026299205, 0.31498026247372, 0.25000000000000, 0.19842513149602,
+ 0.15749013123686, 0.12500000000000, 0.09921256574801, 0.07874506561843,
+ 0.06250000000000, 0.04960628287401, 0.03937253280921, 0.03125000000000,
+ 0.02480314143700, 0.01968626640461, 0.01562500000000, 0.01240157071850,
+ 0.00984313320230, 0.00781250000000, 0.00620078535925, 0.00492156660115,
+ 0.00390625000000, 0.00310039267963, 0.00246078330058, 0.00195312500000,
+ 0.00155019633981, 0.00123039165029, 0.00097656250000, 0.00077509816991,
+ 0.00061519582514, 0.00048828125000, 0.00038754908495, 0.00030759791257,
+ 0.00024414062500, 0.00019377454248, 0.00015379895629, 0.00012207031250,
+ 0.00009688727124, 0.00007689947814, 0.00006103515625, 0.00004844363562,
+ 0.00003844973907, 0.00003051757813, 0.00002422181781, 0.00001922486954,
+ 0.00001525878906, 0.00001211090890, 0.00000961243477, 0.00000762939453,
+ 0.00000605545445, 0.00000480621738, 0.00000381469727, 0.00000302772723,
+ 0.00000240310869, 0.00000190734863, 0.00000151386361, 0.00000120155435,
+ 1E-20
+};
+
+enum byte_order NativeByteOrder = order_unknown;
+
+/***********************************************************************
+*
+* Global Function Definitions
+*
+***********************************************************************/
+
+
+
+int js_bound (int m_ext)
+{
+ /* layer 2 only */
+ static int jsb_table[4] = { 4, 8, 12, 16 };
+
+ if (m_ext < 0 || m_ext > 3) {
+ fprintf (stderr, "js_bound bad modext (%d)\n", m_ext);
+ exit (1);
+ }
+ return (jsb_table[m_ext]);
+}
+
+void hdr_to_frps (frame_info * frame)
+/* interpret data in hdr str to fields in frame */
+{
+ frame_header *hdr = frame->header; /* (or pass in as arg?) */
+
+ frame->actual_mode = hdr->mode;
+ frame->nch = (hdr->mode == MPG_MD_MONO) ? 1 : 2;
+
+ frame->sblimit = pick_table (frame);
+ /* MFC FIX this up */
+ encode_init(frame);
+
+ if (hdr->mode == MPG_MD_JOINT_STEREO)
+ frame->jsbound = js_bound (hdr->mode_ext);
+ else
+ frame->jsbound = frame->sblimit;
+ /* alloc, tab_num set in pick_table */
+}
+
+int BitrateIndex (int bRate, /* legal rates from 32 to 448 */
+ int version /* MPEG-1 or MPEG-2 LSF */ )
+/* convert bitrate in kbps to index */
+{
+ int index = 0;
+ int found = 0;
+
+ while (!found && index < 15) {
+ if (bitrate[version][index] == bRate)
+ found = 1;
+ else
+ ++index;
+ }
+ if (found)
+ return (index);
+ else {
+ fprintf (stderr,
+ "BitrateIndex: %d is not a legal bitrate for version %i\n",
+ bRate, version);
+ exit (-1); /* Error! */
+ }
+}
+
+int SmpFrqIndex (long sRate, int *version)
+/* convert samp frq in Hz to index */
+/* legal rates 16000, 22050, 24000, 32000, 44100, 48000 */
+{
+ if (sRate == 44100L) {
+ *version = MPEG_AUDIO_ID;
+ return (0);
+ } else if (sRate == 48000L) {
+ *version = MPEG_AUDIO_ID;
+ return (1);
+ } else if (sRate == 32000L) {
+ *version = MPEG_AUDIO_ID;
+ return (2);
+ } else if (sRate == 24000L) {
+ *version = MPEG_PHASE2_LSF;
+ return (1);
+ } else if (sRate == 22050L) {
+ *version = MPEG_PHASE2_LSF;
+ return (0);
+ } else if (sRate == 16000L) {
+ *version = MPEG_PHASE2_LSF;
+ return (2);
+ } else {
+ fprintf (stderr, "SmpFrqIndex: %ld is not a legal sample rate\n", sRate);
+ return (-1); /* Error! */
+ }
+}
+
+
+
+
+
+/********************************************************************
+new_ext()
+Puts a new extension name on a file name <filename>.
+Removes the last extension name, if any.
+1992-08-19, 1995-06-12 shn
+***********************************************************************/
+void new_ext (char *filename, char *extname, char *newname)
+{
+ int found, dotpos;
+
+ /* First, strip the extension */
+ dotpos = strlen (filename);
+ found = 0;
+ do {
+ switch (filename[dotpos]) {
+ case '.':
+ found = 1;
+ break;
+ case '\\':
+ case '/':
+ case ':':
+ found = -1;
+ break;
+ default:
+ dotpos--;
+ if (dotpos < 0)
+ found = -1;
+ break;
+ }
+ }
+ while (found == 0);
+ if (found == -1)
+ strcpy (newname, filename);
+ if (found == 1) {
+ strncpy (newname, filename, dotpos);
+ newname[dotpos] = '\0';
+ }
+ strcat (newname, extname);
+}