1
0
mirror of https://github.com/nu774/fdkaac.git synced 2025-06-05 23:29:14 +02:00

4 Commits

4 changed files with 54 additions and 10 deletions

View File

@ -24,6 +24,12 @@ if FDK_PLATFORM_WIN32
src/compat_win32.c
endif
if FDK_NO_GETOPT_LONG
fdkaac_SOURCES += \
missings/getopt.c
AM_CPPFLAGS = -Imissings
endif
EXTRA_DIST = \
src/*.h \
missings/*.c \

View File

@ -12,7 +12,7 @@ AM_INIT_AUTOMAKE
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([fdk-aac/aacenc_lib.h], ,
AC_MSG_ERROR([libfdk-aac is required]))
@ -33,6 +33,8 @@ AC_CHECK_TYPES([ptrdiff_t])
AC_SYS_LARGEFILE
AC_FUNC_FSEEKO
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_CANONICAL_HOST

View File

@ -13,7 +13,14 @@
#include <string.h>
#include <locale.h>
#include <errno.h>
#include <sys/stat.h>
#include <getopt.h>
#if HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifdef _WIN32
#include <io.h>
#endif
#include "compat.h"
#include "wav_reader.h"
#include "aacenc.h"
@ -409,7 +416,8 @@ int finalize_m4a(m4af_writer_t *m4af, const aacenc_param_ex_t *params,
if (params->bitrate_mode)
sprintf(p, "VBR mode %d", params->bitrate_mode);
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);
}
@ -420,6 +428,37 @@ int finalize_m4a(m4af_writer_t *m4af, const aacenc_param_ex_t *params,
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)
{
wav_io_context_t wav_io = { read_callback, seek_callback };
@ -438,6 +477,7 @@ int main(int argc, char **argv)
const pcm_sample_description_t *sample_format;
int downsampled_timescale = 0;
int frame_count = 0;
struct stat stb = { 0 };
setlocale(LC_CTYPE, "");
setbuf(stderr, 0);
@ -451,7 +491,7 @@ int main(int argc, char **argv)
goto END;
}
if (ifp == stdin)
if (fstat(fileno(ifp), &stb) == 0 && (stb.st_mode & S_IFMT) != S_IFREG)
wav_io.seek = 0;
if ((wavf = wav_open(&wav_io, ifp, params.ignore_length)) == 0) {
@ -465,12 +505,8 @@ int main(int argc, char **argv)
goto END;
if (!params.output_filename) {
size_t ilen = strlen(params.input_filename);
const char *ext = strrchr(params.input_filename, '.');
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");
const char *ext = params.transport_format ? ".aac" : ".m4a";
output_filename = generate_output_filename(params.input_filename, ext);
params.output_filename = output_filename;
}

View File

@ -1,4 +1,4 @@
#ifndef VERSION_H
#define VERSION_H
const char *fdkaac_version = "0.0.3";
const char *fdkaac_version = "0.0.4";
#endif