mirror of
https://github.com/nu774/fdkaac.git
synced 2025-06-05 23:29:14 +02:00
Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
d5a9697e47 | |||
7222b0b5ac | |||
112fdaf461 | |||
af8fa38d33 | |||
d1ce25369b | |||
bae3489b91 |
13
Makefile.am
13
Makefile.am
@ -1,5 +1,5 @@
|
|||||||
ACLOCAL_AMFLAGS = -I m4
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
EXTRA_DIST = COPYING
|
AUTOMAKE_OPTIONS = subdir-objects
|
||||||
|
|
||||||
bin_PROGRAMS = fdkaac
|
bin_PROGRAMS = fdkaac
|
||||||
|
|
||||||
@ -23,3 +23,14 @@ if FDK_PLATFORM_WIN32
|
|||||||
fdkaac_SOURCES += \
|
fdkaac_SOURCES += \
|
||||||
src/compat_win32.c
|
src/compat_win32.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if FDK_NO_GETOPT_LONG
|
||||||
|
fdkaac_SOURCES += \
|
||||||
|
missings/getopt.c
|
||||||
|
AM_CPPFLAGS = -Imissings
|
||||||
|
endif
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
src/*.h \
|
||||||
|
missings/*.c \
|
||||||
|
missings/*.h
|
||||||
|
@ -10,8 +10,9 @@ AC_CONFIG_MACRO_DIR([m4])
|
|||||||
AM_INIT_AUTOMAKE
|
AM_INIT_AUTOMAKE
|
||||||
|
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
|
AM_PROG_CC_C_O
|
||||||
|
|
||||||
AC_CHECK_HEADERS([getopt.h sys/time.h])
|
AC_CHECK_HEADERS([sys/time.h])
|
||||||
AC_CHECK_HEADERS([localcharset.h langinfo.h endian.h byteswap.h])
|
AC_CHECK_HEADERS([localcharset.h langinfo.h endian.h byteswap.h])
|
||||||
AC_CHECK_HEADERS([fdk-aac/aacenc_lib.h], ,
|
AC_CHECK_HEADERS([fdk-aac/aacenc_lib.h], ,
|
||||||
AC_MSG_ERROR([libfdk-aac is required]))
|
AC_MSG_ERROR([libfdk-aac is required]))
|
||||||
@ -32,6 +33,8 @@ AC_CHECK_TYPES([ptrdiff_t])
|
|||||||
AC_SYS_LARGEFILE
|
AC_SYS_LARGEFILE
|
||||||
AC_FUNC_FSEEKO
|
AC_FUNC_FSEEKO
|
||||||
AC_CHECK_FUNCS([gettimeofday nl_langinfo strdup])
|
AC_CHECK_FUNCS([gettimeofday nl_langinfo strdup])
|
||||||
|
AC_CHECK_FUNC(getopt_long)
|
||||||
|
AM_CONDITIONAL([FDK_NO_GETOPT_LONG],[test "$ac_cv_func_getopt_long" != "yes"])
|
||||||
AC_SEARCH_LIBS([aacEncOpen],[fdk-aac])
|
AC_SEARCH_LIBS([aacEncOpen],[fdk-aac])
|
||||||
|
|
||||||
AC_CANONICAL_HOST
|
AC_CANONICAL_HOST
|
||||||
|
55
src/main.c
55
src/main.c
@ -13,7 +13,14 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
|
#if HAVE_UNISTD_H
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <io.h>
|
||||||
|
#endif
|
||||||
#include "compat.h"
|
#include "compat.h"
|
||||||
#include "wav_reader.h"
|
#include "wav_reader.h"
|
||||||
#include "aacenc.h"
|
#include "aacenc.h"
|
||||||
@ -398,8 +405,7 @@ int finalize_m4a(m4af_writer_t *m4af, const aacenc_param_ex_t *params,
|
|||||||
|
|
||||||
p += sprintf(p, PROGNAME " %s, ", fdkaac_version);
|
p += sprintf(p, PROGNAME " %s, ", fdkaac_version);
|
||||||
|
|
||||||
lib_info = malloc(FDK_MODULE_LAST * sizeof(LIB_INFO));
|
lib_info = calloc(FDK_MODULE_LAST, sizeof(LIB_INFO));
|
||||||
/* XXX: aacEncGetLibInfo() seems buggy and sometimes fails */
|
|
||||||
if (aacEncGetLibInfo(lib_info) == AACENC_OK) {
|
if (aacEncGetLibInfo(lib_info) == AACENC_OK) {
|
||||||
for (i = 0; i < FDK_MODULE_LAST; ++i)
|
for (i = 0; i < FDK_MODULE_LAST; ++i)
|
||||||
if (lib_info[i].module_id == FDK_AACENC)
|
if (lib_info[i].module_id == FDK_AACENC)
|
||||||
@ -410,7 +416,8 @@ int finalize_m4a(m4af_writer_t *m4af, const aacenc_param_ex_t *params,
|
|||||||
if (params->bitrate_mode)
|
if (params->bitrate_mode)
|
||||||
sprintf(p, "VBR mode %d", params->bitrate_mode);
|
sprintf(p, "VBR mode %d", params->bitrate_mode);
|
||||||
else
|
else
|
||||||
sprintf(p, "CBR %dkbps", params->bitrate / 1000);
|
sprintf(p, "CBR %dkbps",
|
||||||
|
aacEncoder_GetParam(encoder, AACENC_BITRATE) / 1000);
|
||||||
|
|
||||||
m4af_add_itmf_string_tag(m4af, M4AF_TAG_TOOL, tool_info);
|
m4af_add_itmf_string_tag(m4af, M4AF_TAG_TOOL, tool_info);
|
||||||
}
|
}
|
||||||
@ -421,6 +428,37 @@ int finalize_m4a(m4af_writer_t *m4af, const aacenc_param_ex_t *params,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
const char *basename(const char *filename)
|
||||||
|
{
|
||||||
|
char *p = strrchr(filename, '/');
|
||||||
|
#ifdef _WIN32
|
||||||
|
char *q = strrchr(filename, '\\');
|
||||||
|
if (p < q) p = q;
|
||||||
|
#endif
|
||||||
|
return p ? p + 1 : filename;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
char *generate_output_filename(const char *filename, const char *ext)
|
||||||
|
{
|
||||||
|
char *p = 0;
|
||||||
|
size_t ext_len = strlen(ext);
|
||||||
|
|
||||||
|
if (strcmp(filename, "-") == 0) {
|
||||||
|
p = malloc(ext_len + 6);
|
||||||
|
sprintf(p, "stdin%s", ext);
|
||||||
|
} else {
|
||||||
|
const char *base = basename(filename);
|
||||||
|
size_t ilen = strlen(base);
|
||||||
|
const char *ext_org = strrchr(base, '.');
|
||||||
|
if (ext_org) ilen = ext_org - base;
|
||||||
|
p = malloc(ilen + ext_len + 1);
|
||||||
|
sprintf(p, "%.*s%s", ilen, base, ext);
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
wav_io_context_t wav_io = { read_callback, seek_callback };
|
wav_io_context_t wav_io = { read_callback, seek_callback };
|
||||||
@ -439,6 +477,7 @@ int main(int argc, char **argv)
|
|||||||
const pcm_sample_description_t *sample_format;
|
const pcm_sample_description_t *sample_format;
|
||||||
int downsampled_timescale = 0;
|
int downsampled_timescale = 0;
|
||||||
int frame_count = 0;
|
int frame_count = 0;
|
||||||
|
struct stat stb = { 0 };
|
||||||
|
|
||||||
setlocale(LC_CTYPE, "");
|
setlocale(LC_CTYPE, "");
|
||||||
setbuf(stderr, 0);
|
setbuf(stderr, 0);
|
||||||
@ -452,7 +491,7 @@ int main(int argc, char **argv)
|
|||||||
goto END;
|
goto END;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ifp == stdin)
|
if (fstat(fileno(ifp), &stb) == 0 && (stb.st_mode & S_IFMT) != S_IFREG)
|
||||||
wav_io.seek = 0;
|
wav_io.seek = 0;
|
||||||
|
|
||||||
if ((wavf = wav_open(&wav_io, ifp, params.ignore_length)) == 0) {
|
if ((wavf = wav_open(&wav_io, ifp, params.ignore_length)) == 0) {
|
||||||
@ -466,12 +505,8 @@ int main(int argc, char **argv)
|
|||||||
goto END;
|
goto END;
|
||||||
|
|
||||||
if (!params.output_filename) {
|
if (!params.output_filename) {
|
||||||
size_t ilen = strlen(params.input_filename);
|
const char *ext = params.transport_format ? ".aac" : ".m4a";
|
||||||
const char *ext = strrchr(params.input_filename, '.');
|
output_filename = generate_output_filename(params.input_filename, ext);
|
||||||
if (ext) ilen = ext - params.input_filename;
|
|
||||||
output_filename = malloc(ilen + 5);
|
|
||||||
sprintf(output_filename, "%.*s%s", ilen, params.input_filename,
|
|
||||||
params.transport_format ? ".aac" : ".m4a");
|
|
||||||
params.output_filename = output_filename;
|
params.output_filename = output_filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user