/* FOURCC reader and changer, v0.1 by Julien Antille */ /* julien.antille@xxxxxxxxx */ #include int display_fourcc(char * filename) { char FOURCC[5]; FILE * fichier; if((fichier = fopen(filename, "r")) == NULL){ printf("Cannot open %s\n", filename); return 0; } //0xBC is the offset of the FOURCC's 1st byte fseek(fichier, 0xBC, 0); if ((fgets(FOURCC, 5, fichier)==NULL)) { printf("File does not seem to be a valid AVI\n"); return 0; } printf("FOURCC for %s is %s\n", filename, FOURCC); fclose(fichier); } int change_fourcc(char * filename, char * fourcc){ FILE * fichier; if (strlen(fourcc) != 4) { printf("FOURCC length must be 4 bytes\n"); return 0; } if((fichier = fopen(filename, "r+")) == NULL){ printf("Cannot open %s for read-write\n", filename); return 0; } //0xBC is the offset of the FOURCC's 1st byte fseek(fichier, 0xBC, 0); if((fputs(fourcc, fichier) == -1)) { printf("Failed to change FOURCC !\n"); return 0; } printf("FOURCC changed to %s\n", fourcc); fclose(fichier); return 1; } int main(int argc, char * argv[]) { if (!argv[1]) { printf("Usage : fourcc [forced_fourcc]\n"); printf("The usage of forced_fourcc forces the FOURCC for the given AVI. Use with caution\n"); return 0; } if (!argv[2]){ return display_fourcc(argv[1]); } else { return change_fourcc(argv[1], argv[2]); } }