]> iEval git - fdkaac.git/blobdiff - src/main.c
fixed a typo in usage message
[fdkaac.git] / src / main.c
index fe4653e7d7f412f426e6b4f916d73c69e74259d4..d32a2e5e85fc56d2b7b2216e64e0859e24740d5e 100644 (file)
 #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"
@@ -73,7 +80,7 @@ PROGNAME " %s\n"
 "                                parameter settings, sample rate, and\n"
 "                                channel configuration)\n"
 " -w, --bandwidth <n>           Frequency bandwidth in Hz (AAC LC only)\n"
-" -a, --afterurner <n>          Afterburner\n"
+" -a, --afterburner <n>         Afterburner\n"
 "                                 0: Off\n"
 "                                 1: On(default)\n"
 " -L, --lowdelay-sbr            Enable ELD-SBR (AAC ELD only)\n"
@@ -398,8 +405,7 @@ int finalize_m4a(m4af_writer_t *m4af, const aacenc_param_ex_t *params,
 
         p += sprintf(p, PROGNAME " %s, ", fdkaac_version);
 
-        lib_info = malloc(FDK_MODULE_LAST * sizeof(LIB_INFO));
-        /* XXX: aacEncGetLibInfo() seems buggy and sometimes fails */
+        lib_info = calloc(FDK_MODULE_LAST, sizeof(LIB_INFO));
         if (aacEncGetLibInfo(lib_info) == AACENC_OK) {
             for (i = 0; i < FDK_MODULE_LAST; ++i)
                 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)
             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);
     }
@@ -421,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 };
@@ -439,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);
@@ -452,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) {
@@ -466,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;
     }
 
This page took 0.031279 seconds and 4 git commands to generate.