Initial commit of old code
This commit is contained in:
commit
7f181eb8b6
189
main.c
Normal file
189
main.c
Normal file
@ -0,0 +1,189 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
#define THRESHOLD 1200
|
||||
|
||||
/* portions derived from IJG code */
|
||||
|
||||
#define readbyte(a,b) do if(((a)=getc((b))) == EOF) return 0; while (0)
|
||||
#define readword(a,b) do { int cc_=0,dd_=0; \
|
||||
if((cc_=getc((b))) == EOF \
|
||||
|| (dd_=getc((b))) == EOF) return 0; \
|
||||
(a) = (cc_<<8) + (dd_); \
|
||||
} while(0)
|
||||
|
||||
|
||||
int scanhead (FILE * infile, int * image_width, int * image_height) {
|
||||
int marker=0;
|
||||
int dummy=0;
|
||||
if ( getc(infile) != 0xFF || getc(infile) != 0xD8 )
|
||||
return 0;
|
||||
|
||||
for (;
|
||||
;) {
|
||||
|
||||
|
||||
int discarded_bytes=0;
|
||||
readbyte(marker,infile);
|
||||
while (marker != 0xFF) {
|
||||
discarded_bytes++;
|
||||
readbyte(marker,infile);
|
||||
}
|
||||
do readbyte(marker,infile); while (marker == 0xFF);
|
||||
|
||||
if (discarded_bytes != 0) return 0;
|
||||
|
||||
switch (marker) {
|
||||
case 0xC0:
|
||||
case 0xC1:
|
||||
case 0xC2:
|
||||
case 0xC3:
|
||||
case 0xC5:
|
||||
case 0xC6:
|
||||
case 0xC7:
|
||||
case 0xC9:
|
||||
case 0xCA:
|
||||
case 0xCB:
|
||||
case 0xCD:
|
||||
case 0xCE:
|
||||
case 0xCF: {
|
||||
readword(dummy,infile); /* usual parameter length count */
|
||||
readbyte(dummy,infile);
|
||||
readword((*image_height),infile);
|
||||
readword((*image_width),infile);
|
||||
readbyte(dummy,infile);
|
||||
|
||||
return 1;
|
||||
break;
|
||||
}
|
||||
case 0xDA:
|
||||
case 0xD9:
|
||||
return 0;
|
||||
default: {
|
||||
int length;
|
||||
|
||||
readword(length,infile);
|
||||
|
||||
if (length < 2)
|
||||
return 0;
|
||||
length -= 2;
|
||||
while (length > 0) {
|
||||
readbyte(dummy, infile);
|
||||
length--;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int scanPNG(FILE *fp, int *width, int *height)
|
||||
{
|
||||
uint8_t img_buf[4];
|
||||
uint32_t w;
|
||||
uint32_t h;
|
||||
|
||||
// NO SEEKING IN PIPE
|
||||
// fseek(fp, 16, SEEK_SET);
|
||||
fread(img_buf, 1, 4, fp);
|
||||
fread(img_buf, 1, 4, fp);
|
||||
fread(img_buf, 1, 4, fp);
|
||||
fread(img_buf, 1, 4, fp);
|
||||
|
||||
// Read Width
|
||||
fread(img_buf, 1, 4, fp);
|
||||
w = img_buf[0];
|
||||
w <<= 8;
|
||||
w += img_buf[1];
|
||||
w <<= 8;
|
||||
w += img_buf[2];
|
||||
w <<= 8;
|
||||
w += img_buf[3];
|
||||
|
||||
// Read Height
|
||||
fread(img_buf, 1, 4, fp);
|
||||
h = img_buf[0];
|
||||
h <<= 8;
|
||||
h += img_buf[1];
|
||||
h <<= 8;
|
||||
h += img_buf[2];
|
||||
h <<= 8;
|
||||
h += img_buf[3];
|
||||
|
||||
*width = w;
|
||||
*height = h;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int fpeek(FILE *stream)
|
||||
{
|
||||
int c;
|
||||
|
||||
if (feof(stream))
|
||||
{
|
||||
return EOF;
|
||||
}
|
||||
c = fgetc(stream);
|
||||
ungetc(c, stream);
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int width;
|
||||
int height;
|
||||
int peek;
|
||||
FILE *pp;
|
||||
char cmd[2048];
|
||||
|
||||
if (argc < 2)
|
||||
{
|
||||
printf("Need filename\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
strcpy(cmd, "metaflac --export-picture-to=- \"");
|
||||
strcat(cmd, argv[1]);
|
||||
strcat(cmd, "\" 2>&1");
|
||||
|
||||
pp = popen(cmd, "r");
|
||||
if (NULL == pp)
|
||||
{
|
||||
printf("Bad PP: '%s'\n", argv[1]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
peek = fpeek(pp);
|
||||
switch (peek)
|
||||
{
|
||||
case 0xFF:
|
||||
//JPG
|
||||
scanhead(pp, &width, &height);
|
||||
if ((width > THRESHOLD) || (height > THRESHOLD))
|
||||
{
|
||||
printf("'%s' W:%04d H:%04d\n", argv[1], width, height);
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x89:
|
||||
//PNG
|
||||
scanPNG(pp, &width, &height);
|
||||
if ((width > THRESHOLD) || (height > THRESHOLD))
|
||||
{
|
||||
printf("'%s' W:%04d H:%04d\n", argv[1], width, height);
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x2F:
|
||||
break;
|
||||
|
||||
default:
|
||||
//NaN
|
||||
printf("'%s' WeirdChamp: 0x%02X\n", argv[1], peek);
|
||||
}
|
||||
pclose(pp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user