Skip to content
Snippets Groups Projects
Commit 833c349c authored by Mathis Rosenhauer's avatar Mathis Rosenhauer Committed by Thomas Jahns
Browse files

Merged encode and decode into aec

parent 855c5d3d
No related branches found
No related tags found
No related merge requests found
......@@ -16,9 +16,10 @@ int main(int argc, char *argv[])
uint8_t *out;
int chunk, total_out, status, c;
int input_avail, output_avail;
char *outfn, *infn;
char *outfn, *infn, *ext;
FILE *infp, *outfp;
int cflag = 0;
int dflag = 0;
chunk = CHUNK;
strm.bit_per_sample = 8;
......@@ -27,9 +28,12 @@ int main(int argc, char *argv[])
strm.flags = AE_DATA_PREPROCESS;
opterr = 0;
while ((c = getopt (argc, argv, "3Mscb:B:R:J:")) != -1)
while ((c = getopt (argc, argv, "d3Mscb:B:R:J:")) != -1)
switch (c)
{
case 'd':
dflag = 1;
break;
case 'b':
chunk = atoi(optarg);
break;
......@@ -97,9 +101,6 @@ int main(int argc, char *argv[])
if (in == NULL || out == NULL)
exit(-1);
if (ae_encode_init(&strm) != AE_OK)
return 1;
total_out = 0;
strm.avail_in = 0;
strm.avail_out = chunk;
......@@ -121,12 +122,35 @@ int main(int argc, char *argv[])
if (outfn == NULL)
exit(-1);
sprintf(outfn, "%s.aee", infn);
if (dflag)
{
if ((ext = strstr(infn, ".aee")) == NULL)
{
fprintf(stderr, "Error: input file needs to end with .aee\n");
exit(-1);
}
strncpy(outfn, infn, ext - infn);
}
else
{
sprintf(outfn, "%s.aee", infn);
}
if ((outfp = fopen(outfn, "w")) == NULL)
exit(-1);
}
if (dflag)
{
if (ae_decode_init(&strm) != AE_OK)
return 1;
}
else
{
if (ae_encode_init(&strm) != AE_OK)
return 1;
}
while(input_avail || output_avail)
{
if (strm.avail_in == 0 && input_avail)
......@@ -137,7 +161,12 @@ int main(int argc, char *argv[])
strm.next_in = (uint8_t *)in;
}
if ((status = ae_encode(&strm, AE_NO_FLUSH)) != AE_OK)
if (dflag)
status = ae_decode(&strm, AE_NO_FLUSH);
else
status = ae_encode(&strm, AE_NO_FLUSH);
if (status != AE_OK)
{
fprintf(stderr, "error is %i\n", status);
return 1;
......@@ -158,18 +187,26 @@ int main(int argc, char *argv[])
}
if ((status = ae_encode(&strm, AE_FLUSH)) != AE_OK)
if (dflag)
{
fprintf(stderr, "error is %i\n", status);
return 1;
ae_decode_end(&strm);
}
if (strm.total_out - total_out > 0)
else
{
fwrite(out, strm.total_out - total_out, 1, outfp);
if ((status = ae_encode(&strm, AE_FLUSH)) != AE_OK)
{
fprintf(stderr, "error is %i\n", status);
return 1;
}
if (strm.total_out - total_out > 0)
{
fwrite(out, strm.total_out - total_out, 1, outfp);
}
ae_encode_end(&strm);
}
ae_encode_end(&strm);
fclose(infp);
fclose(outfp);
free(in);
......
#include <ctype.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <inttypes.h>
#include <string.h>
#include <getopt.h>
#include "libae.h"
#define CHUNK 1024
int main(int argc, char *argv[])
{
ae_stream strm;
uint8_t *in;
uint8_t *out;
int chunk, c, total_out, status;
int input_avail, output_avail;
char *outfn, *infn, *ext;
FILE *infp, *outfp;
int cflag = 0;
chunk = CHUNK;
strm.bit_per_sample = 8;
strm.block_size = 8;
strm.rsi = 2;
strm.flags = AE_DATA_PREPROCESS;
opterr = 0;
while ((c = getopt (argc, argv, "3Mscb:B:J:R:")) != -1)
switch (c)
{
case 'b':
chunk = atoi(optarg);
break;
case 'B':
strm.bit_per_sample = atoi(optarg);
break;
case 'J':
strm.block_size = atoi(optarg);
break;
case 'R':
strm.rsi = atoi(optarg);
break;
case 'c':
cflag = 1;
break;
case 's':
strm.flags |= AE_DATA_SIGNED;
break;
case 'M':
strm.flags |= AE_DATA_MSB;
break;
case '3':
strm.flags |= AE_DATA_3BYTE;
break;
case '?':
if (optopt == 'b')
fprintf (stderr, "Option -%c requires an argument.\n", optopt);
else if (isprint (optopt))
fprintf (stderr, "Unknown option `-%c'.\n", optopt);
else
fprintf (stderr,
"Unknown option character `\\x%x'.\n",
optopt);
return 1;
default:
abort ();
}
if (optind < argc)
{
infn = argv[optind];
}
else
{
fprintf(stderr, "Usage: %s [ -c ] [ -b chunksize ] name\n", argv[0]);
exit(-1);
}
if (strm.bit_per_sample > 16)
{
if (strm.bit_per_sample <= 24 && strm.flags & AE_DATA_3BYTE)
chunk *= 3;
else
chunk *= 4;
}
else if (strm.bit_per_sample > 8)
{
chunk *= 2;
}
in = (uint8_t *)malloc(chunk);
out = (uint8_t *)malloc(chunk);
if (in == NULL || out == NULL)
return 1;
if (cflag)
{
outfp = stdout;
}
else
{
outfn = malloc(strlen(infn));
if (outfn == NULL)
exit(-1);
if ((ext = strstr(infn, ".aee")) == NULL)
{
fprintf(stderr, "Error: input file needs to end with .aee\n");
exit(-1);
}
strncpy(outfn, infn, ext - infn);
if ((outfp = fopen(outfn, "w")) == NULL)
exit(-1);
}
if ((infp = fopen(infn, "r")) == NULL)
exit(-1);
if (ae_decode_init(&strm) != AE_OK)
return 1;
total_out = 0;
strm.avail_in = 0;
strm.avail_out = chunk;
strm.next_out = (uint8_t *)out;
input_avail = 1;
output_avail = 1;
while(input_avail || output_avail)
{
if (strm.avail_in == 0)
{
strm.avail_in = fread(in, 1, chunk, infp);
if (strm.avail_in != chunk)
input_avail = 0;
strm.next_in = in;
}
if ((status = ae_decode(&strm, AE_NO_FLUSH)) != AE_OK)
{
fprintf(stderr, "error is %i\n", status);
return 1;
}
if (strm.total_out - total_out > 0)
{
fwrite(out, strm.total_out - total_out, 1, outfp);
total_out = strm.total_out;
output_avail = 1;
strm.next_out = (uint8_t *)out;
strm.avail_out = chunk;
}
else
{
output_avail = 0;
}
}
ae_decode_end(&strm);
fclose(infp);
fclose(outfp);
free(in);
free(out);
if (!cflag)
{
unlink(infn);
free(outfn);
}
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment