int asf_check_header(demuxer_t *demuxer){ unsigned char asfhdrguid[16]={0x30,0x26,0xB2,0x75,0x8E,0x66,0xCF,0x11,0xA6,0xD9,0x00,0xAA,0x00,0x62,0xCE,0x6C}; struct asf_priv* asf = calloc(1,sizeof(*asf)); asf->scrambling_h=asf->scrambling_w=asf->scrambling_b=1; stream_read(demuxer->stream,(char*) &asf->header,sizeof(asf->header)); // header obj le2me_ASF_header_t(&asf->header); // swap to machine endian // for(i=0;i<16;i++) printf(" %02X",temp[i]);printf("\n"); // for(i=0;i<16;i++) printf(" %02X",asfhdrguid[i]);printf("\n"); if(memcmp(asfhdrguid,asf->header.objh.guid,16)){ mp_msg(MSGT_HEADER,MSGL_V,"ASF_check: not ASF guid!\n"); free(asf); return 0; // not ASF guid } if(asf->header.cno>256){ mp_msg(MSGT_HEADER,MSGL_V,"ASF_check: invalid subchunks_no %d\n",(int) asf->header.cno); free(asf); return 0; // invalid header??? } demuxer->priv = asf; return DEMUXER_TYPE_ASF; }
int asf_check_header(struct statex *statex, FILE *fp) { unsigned char asfhdrguid[16]={0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9, 0x00, 0xAA, 0x00, 0x62, 0xCE, 0x6C}; fread((char*) &asfh, sizeof(asfh), 1, fp); le2me_ASF_header_t(&asfh); if (memcmp(asfhdrguid, asfh.objh.guid, 16)) { fprintf(stderr, "%s: %s is not a wma file\n", progopts.progname, statex->path); return 0; } if (asfh.cno > 256) { fprintf(stdout, "ASF_check: invalid subchunks_no %d\n", (int) asfh.cno); return 0; } return 1; }