/* * TwoLAME: an optimized MPEG Audio Layer Two encoder * * Copyright (C) 2001-2004 Michael Cheng * Copyright (C) 2004-2006 The TwoLAME Project * * This library is free software; you can redistribute it 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. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * $Id$ * */ #include #include #include #include #include #include "twolame.h" #include "bitbuffer.h" #include "common.h" #include "mem.h" #include "util.h" #include "energy.h" /*********************************************/ int twolame_set_mode(twolame_options * glopts, TWOLAME_MPEG_mode mode) { if (mode < TWOLAME_AUTO_MODE || mode > TWOLAME_MONO) { fprintf(stderr, "invalid mode %i\n", mode); return (-1); } glopts->mode = mode; return (0); } TWOLAME_MPEG_mode twolame_get_mode(twolame_options * glopts) { return (glopts->mode); } const char *twolame_get_mode_name(twolame_options * glopts) { static const char *mode_name[6] = { "Auto", "Stereo", "J-Stereo", "Dual-Channel", "Mono", "Illegal Mode" }; int mode = glopts->mode; if (mode >= TWOLAME_AUTO_MODE && mode <= TWOLAME_MONO) return (mode_name[mode + 1]); else return (mode_name[5]); } int twolame_set_psymodel(twolame_options * glopts, int psymodel) { glopts->psymodel = psymodel; return (0); } int twolame_get_psymodel(twolame_options * glopts) { return (glopts->psymodel); } /* number of channels on the input stream */ int twolame_set_num_channels(twolame_options * glopts, int num_channels) { glopts->num_channels_in = num_channels; return 0; } int twolame_get_num_channels(twolame_options * glopts) { return (glopts->num_channels_in); } int twolame_set_scale(twolame_options * glopts, float scale) { if (scale < 0) { fprintf(stderr, "invalid scaling amount %f\n", scale); return (-1); } glopts->scale = scale; return 0; } float twolame_get_scale(twolame_options * glopts) { return (glopts->scale); } int twolame_set_scale_left(twolame_options * glopts, float scale) { if (scale < 0) { fprintf(stderr, "invalid scaling amount %f\n", scale); return (-1); } glopts->scale_left = scale; return 0; } float twolame_get_scale_left(twolame_options * glopts) { return (glopts->scale_left); } int twolame_set_scale_right(twolame_options * glopts, float scale) { if (scale < 0) { fprintf(stderr, "invalid scaling amount %f\n", scale); return (-1); } glopts->scale_right = scale; return 0; } float twolame_get_scale_right(twolame_options * glopts) { return (glopts->scale_right); } int twolame_set_in_samplerate(twolame_options * glopts, int samplerate) { glopts->samplerate_in = samplerate; return (0); } int twolame_get_in_samplerate(twolame_options * glopts) { return (glopts->samplerate_in); } int twolame_set_out_samplerate(twolame_options * glopts, int samplerate) { glopts->samplerate_out = samplerate; return (0); } int twolame_get_out_samplerate(twolame_options * glopts) { return (glopts->samplerate_out); } int twolame_set_brate(twolame_options * glopts, int bitrate) { glopts->bitrate = bitrate; return (0); } int twolame_get_brate(twolame_options * glopts) { return (glopts->bitrate); } /* Because the LAME API isn't always the best way ;) */ int twolame_set_bitrate(twolame_options * glopts, int bitrate) { glopts->bitrate = bitrate; return (0); } int twolame_get_bitrate(twolame_options * glopts) { return (glopts->bitrate); } int twolame_set_emphasis(twolame_options * glopts, TWOLAME_Emphasis emphasis) { if (emphasis != TWOLAME_EMPHASIS_N && emphasis != TWOLAME_EMPHASIS_5 && emphasis != TWOLAME_EMPHASIS_C) return (-1); glopts->emphasis = emphasis; return (0); } TWOLAME_Emphasis twolame_get_emphasis(twolame_options * glopts) { return (glopts->emphasis); } int twolame_set_error_protection(twolame_options * glopts, int error_protection) { if (error_protection) glopts->error_protection = TRUE; else error_protection = FALSE; return (0); } int twolame_get_error_protection(twolame_options * glopts) { return (glopts->error_protection); } int twolame_set_copyright(twolame_options * glopts, int copyright) { if (copyright) glopts->copyright = TRUE; else glopts->copyright = FALSE; return (0); } int twolame_get_copyright(twolame_options * glopts) { return (glopts->copyright); } int twolame_set_original(twolame_options * glopts, int original) { if (original) glopts->original = TRUE; else glopts->original = FALSE; return (0); } int twolame_get_original(twolame_options * glopts) { return (glopts->original); } int twolame_set_padding(twolame_options * glopts, TWOLAME_Padding padding) { if (padding) glopts->padding = TRUE; else glopts->padding = FALSE; return (0); } TWOLAME_Padding twolame_get_padding(twolame_options * glopts) { return (glopts->padding); } int twolame_set_VBR(twolame_options * glopts, int vbr) { if (vbr) glopts->vbr = TRUE; else glopts->vbr = FALSE; return (0); } int twolame_get_VBR(twolame_options * glopts) { return (glopts->vbr); } int twolame_set_VBR_level(twolame_options * glopts, float level) { // Limit is -50 to 50, but useful range is -10 to 10 if (fabs(level) > 50.0) return (-1); else glopts->vbrlevel = level; return (0); } float twolame_get_VBR_level(twolame_options * glopts) { return (glopts->vbrlevel); } // Deprecated: int twolame_set_VBR_q(twolame_options * glopts, float level) { // Limit is -50 to 50, but useful range is -10 to 10 if (fabs(level) > 50.0) return (-1); else glopts->vbrlevel = level; return (0); } // Deprecated: float twolame_get_VBR_q(twolame_options * glopts) { return (glopts->vbrlevel); } int twolame_set_ATH_level(twolame_options * glopts, float level) { glopts->athlevel = level; return (0); } float twolame_get_ATH_level(twolame_options * glopts) { return (glopts->athlevel); } int twolame_set_quick_mode(twolame_options * glopts, int quickmode) { if (quickmode) glopts->quickmode = TRUE; else glopts->quickmode = FALSE; return (0); } int twolame_get_quick_mode(twolame_options * glopts) { return (glopts->quickmode); } int twolame_set_quick_count(twolame_options * glopts, int quickcount) { glopts->quickcount = quickcount; return (0); } int twolame_get_quick_count(twolame_options * glopts) { return (glopts->quickcount); } int twolame_set_verbosity(twolame_options * glopts, int verbosity) { if (verbosity < 0 || verbosity > 10) { fprintf(stderr, "invalid verbosity level %i\n", verbosity); return (-1); } glopts->verbosity = verbosity; return (0); } int twolame_get_verbosity(twolame_options * glopts) { return (glopts->verbosity); } int twolame_set_VBR_max_bitrate_kbps(twolame_options * glopts, int bitrate) { glopts->vbr_max_bitrate = bitrate; return (0); } int twolame_get_VBR_max_bitrate_kbps(twolame_options * glopts) { return (glopts->vbr_max_bitrate); } int twolame_set_num_ancillary_bits(twolame_options * glopts, int num) { if (num < 0) return (-1); glopts->num_ancillary_bits = num; return (0); } int twolame_get_num_ancillary_bits(twolame_options * glopts) { return (glopts->num_ancillary_bits); } int twolame_set_energy_levels(twolame_options * glopts, int energylevels) { if (energylevels) { glopts->do_energy_levels = TRUE; } else { glopts->do_energy_levels = FALSE; } return (0); } int twolame_get_energy_levels(twolame_options * glopts) { return (glopts->do_energy_levels); } int twolame_set_version(twolame_options * glopts, TWOLAME_MPEG_version version) { if (version != 0 && version != 1) return (-1); glopts->version = version; return (0); } TWOLAME_MPEG_version twolame_get_version(twolame_options * glopts) { return (glopts->version); } const char *twolame_get_version_name(twolame_options * glopts) { return twolame_mpeg_version_name(glopts->version); } /* WARNING: DAB support is currently broken */ int twolame_set_DAB(twolame_options * glopts, int dab) { fprintf(stderr, "Warning: DAB support is currently broken in this version of TwoLAME.\n"); if (dab) glopts->do_dab = TRUE; else glopts->do_dab = FALSE; return (0); } int twolame_get_DAB(twolame_options * glopts) { return (glopts->do_dab); } int twolame_set_DAB_xpad_length(twolame_options * glopts, int length) { if (length < 0) return (-1); glopts->dab_xpad_len = length; return (0); } int twolame_get_DAB_xpad_length(twolame_options * glopts) { return (glopts->dab_xpad_len); } int twolame_set_DAB_crc_length(twolame_options * glopts, int length) { if (length < 0) return (-1); else glopts->dab_crc_len = length; return (0); } int twolame_get_DAB_crc_length(twolame_options * glopts) { return (glopts->dab_crc_len); } // vim:ts=4:sw=4:nowrap: