aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniil Cherednik <dan.cherednik@gmail.com>2018-12-13 00:03:15 +0300
committerDaniil Cherednik <dan.cherednik@gmail.com>2018-12-13 00:03:15 +0300
commit218e2163453deac6f7a74765a21258b5c566a8cc (patch)
tree8d2ff2517ad6e8cbe239b46be38ca4573b1a007e
parentb2342e902d62067fda5a08c7cccff62ee3619fc5 (diff)
downloadatracdenc-218e2163453deac6f7a74765a21258b5c566a8cc.tar.gz
[liboma] Write support for ATRAC3PLUS header
-rw-r--r--src/oma/liboma/src/liboma.c28
-rw-r--r--src/oma/liboma/src/tools/omacp.c2
2 files changed, 28 insertions, 2 deletions
diff --git a/src/oma/liboma/src/liboma.c b/src/oma/liboma/src/liboma.c
index 4c69ce6..d8a4358 100644
--- a/src/oma/liboma/src/liboma.c
+++ b/src/oma/liboma/src/liboma.c
@@ -80,6 +80,14 @@ static int oma_get_samplerate_idx(int samplerate) {
return -1;
}
+static int oma_get_channel_idx(int channel_format) {
+ for (int i = 0; i < 7; i++) {
+ if (channel_id_to_format_tab[i] == channel_format)
+ return i;
+ }
+ return -1;
+}
+
static int oma_read_atrac3_header(uint32_t params, oma_info_t* info) {
const int js = (params >> 17) & 0x1;
const int samplerate = liboma_samplerates[(params >> 13) & 0x7];
@@ -130,6 +138,24 @@ static int oma_read_atrac3p_header(uint32_t params, oma_info_t* info) {
return 0;
}
+static int oma_write_atrac3p_header(uint32_t *params, oma_info_t *info) {
+
+ const int samplerate_idx = oma_get_samplerate_idx(info->samplerate);
+ if (samplerate_idx == -1)
+ return -1;
+
+ const uint32_t framesz = (info->framesize - 8) / 8;
+ if (framesz > 0x3FF)
+ return -1;
+
+ const int32_t ch_id = oma_get_channel_idx(info->channel_format);
+ if (ch_id < 0)
+ return -1;
+
+ *params = htonl((OMAC_ID_ATRAC3PLUS << 24) | ((int32_t)samplerate_idx << 13) | ((ch_id + 1) << 10) | framesz);
+ return 0;
+}
+
static int oma_write_header(OMAFILE* ctx, oma_info_t *omainfo) {
if (ctx == NULL || omainfo == NULL)
return -1;
@@ -145,7 +171,7 @@ static int oma_write_header(OMAFILE* ctx, oma_info_t *omainfo) {
oma_write_atrac3_header(params, omainfo);
break;
case OMAC_ID_ATRAC3PLUS:
- assert(0);
+ oma_write_atrac3p_header(params, omainfo);
break;
default:
assert(0);
diff --git a/src/oma/liboma/src/tools/omacp.c b/src/oma/liboma/src/tools/omacp.c
index fbce952..77e1325 100644
--- a/src/oma/liboma/src/tools/omacp.c
+++ b/src/oma/liboma/src/tools/omacp.c
@@ -33,7 +33,7 @@ int main(int argc, char* const* argv) {
const char *codecname = oma_get_codecname(info);
const int bitrate = oma_get_bitrate(info);
- fprintf(stdout, "codec: %s, bitrate: %d, channel format: %d\n", codecname, bitrate, info->chanel_format);
+ fprintf(stdout, "codec: %s, bitrate: %d, channel format: %d\n", codecname, bitrate, info->channel_format);
OMAFILE* outfile = oma_open(argv[2], OMAM_W, info);
if (NULL == outfile)