static int ea_probe(AVProbeData *p) { unsigned big_endian, size; switch (AV_RL32(&p->buf[0])) { case ISNh_TAG: case SCHl_TAG: case SEAD_TAG: case SHEN_TAG: case kVGT_TAG: case MADk_TAG: case MPCh_TAG: case MVhd_TAG: case MVIh_TAG: case AVP6_TAG: break; default: return 0; } size = AV_RL32(&p->buf[4]); big_endian = size > 0x000FFFFF; if (big_endian) size = av_bswap32(size); if (size > 0xfffff || size < 8) return 0; return AVPROBE_SCORE_MAX; }
static void body(uint32_t ABCD[4], uint32_t X[16]){ int t; int i av_unused; unsigned int a= ABCD[3]; unsigned int b= ABCD[2]; unsigned int c= ABCD[1]; unsigned int d= ABCD[0]; #if HAVE_BIGENDIAN for(i=0; i<16; i++) X[i]= av_bswap32(X[i]); #endif #if CONFIG_SMALL for( i = 0; i < 64; i++ ){ CORE(i,a,b,c,d) t=d; d=c; c=b; b=a; a=t; } #else #define CORE2(i) CORE(i,a,b,c,d) CORE((i+1),d,a,b,c) CORE((i+2),c,d,a,b) CORE((i+3),b,c,d,a) #define CORE4(i) CORE2(i) CORE2((i+4)) CORE2((i+8)) CORE2((i+12)) CORE4(0) CORE4(16) CORE4(32) CORE4(48) #endif ABCD[0] += d; ABCD[1] += c; ABCD[2] += b; ABCD[3] += a; }
static void bswap_buf(uint32_t *dst, const uint32_t *src, int w) { int i; for (i = 0; i + 8 <= w; i += 8) { dst[i + 0] = av_bswap32(src[i + 0]); dst[i + 1] = av_bswap32(src[i + 1]); dst[i + 2] = av_bswap32(src[i + 2]); dst[i + 3] = av_bswap32(src[i + 3]); dst[i + 4] = av_bswap32(src[i + 4]); dst[i + 5] = av_bswap32(src[i + 5]); dst[i + 6] = av_bswap32(src[i + 6]); dst[i + 7] = av_bswap32(src[i + 7]); } for (; i < w; i++) dst[i + 0] = av_bswap32(src[i + 0]); }
int mp_get_chroma_shift(int format, int *x_shift, int *y_shift, int *component_bits) { int xs = 0, ys = 0; int bpp; int err = 0; int bits = 8; if ((format & 0xff0000f0) == 0x34000050) format = av_bswap32(format); if ((format & 0xf00000ff) == 0x50000034) { switch (format >> 24) { case 0x50: break; case 0x51: bits = 16; break; case 0x52: bits = 10; break; case 0x53: bits = 9; break; default: err = 1; break; } switch (format & 0x00ffffff) { case 0x00343434: // 444 xs = 0; ys = 0; break; case 0x00323234: // 422 xs = 1; ys = 0; break; case 0x00303234: // 420 xs = 1; ys = 1; break; case 0x00313134: // 411 xs = 2; ys = 0; break; case 0x00303434: // 440 xs = 0; ys = 1; break; default: err = 1; break; } } else switch (format) {
int ff_decklink_list_formats(AVFormatContext *avctx, decklink_direction_t direction) { struct decklink_cctx *cctx = (struct decklink_cctx *)avctx->priv_data; struct decklink_ctx *ctx = (struct decklink_ctx *)cctx->ctx; IDeckLinkDisplayModeIterator *itermode; IDeckLinkDisplayMode *mode; uint32_t format_code; HRESULT res; if (direction == DIRECTION_IN) { int ret; ret = decklink_select_input(avctx, bmdDeckLinkConfigAudioInputConnection); if (ret < 0) return ret; ret = decklink_select_input(avctx, bmdDeckLinkConfigVideoInputConnection); if (ret < 0) return ret; res = ctx->dli->GetDisplayModeIterator (&itermode); } else { res = ctx->dlo->GetDisplayModeIterator (&itermode); } if (res!= S_OK) { av_log(avctx, AV_LOG_ERROR, "Could not get Display Mode Iterator\n"); return AVERROR(EIO); } av_log(avctx, AV_LOG_INFO, "Supported formats for '%s':\n\tformat_code\tdescription", avctx->filename); while (itermode->Next(&mode) == S_OK) { BMDTimeValue tb_num, tb_den; mode->GetFrameRate(&tb_num, &tb_den); format_code = av_bswap32(mode->GetDisplayMode()); av_log(avctx, AV_LOG_INFO, "\n\t%.4s\t\t%ldx%ld at %d/%d fps", (char*) &format_code, mode->GetWidth(), mode->GetHeight(), (int) tb_den, (int) tb_num); switch (mode->GetFieldDominance()) { case bmdLowerFieldFirst: av_log(avctx, AV_LOG_INFO, " (interlaced, lower field first)"); break; case bmdUpperFieldFirst: av_log(avctx, AV_LOG_INFO, " (interlaced, upper field first)"); break; } mode->Release(); } av_log(avctx, AV_LOG_INFO, "\n"); itermode->Release(); return 0; }
static void body(uint32_t ABCD[4], uint32_t *src, int nblocks) { int i av_unused; int n; uint32_t a, b, c, d, t, *X; for (n = 0; n < nblocks; n++) { a = ABCD[3]; b = ABCD[2]; c = ABCD[1]; d = ABCD[0]; X = src + n * 16; #if HAVE_BIGENDIAN for (i = 0; i < 16; i++) X[i] = av_bswap32(X[i]); #endif #if CONFIG_SMALL for (i = 0; i < 64; i++) { CORE(i, a, b, c, d); t = d; d = c; c = b; b = a; a = t; } #else #define CORE2(i) \ CORE(i, a, b, c, d); CORE((i + 1), d, a, b, c); \ CORE((i + 2), c, d, a, b); CORE((i + 3), b, c, d, a) #define CORE4(i) CORE2(i); CORE2((i + 4)); CORE2((i + 8)); CORE2((i + 12)) CORE4(0); CORE4(16); CORE4(32); CORE4(48); #endif ABCD[0] += d; ABCD[1] += c; ABCD[2] += b; ABCD[3] += a; } }
/* Process EA file header. * Return 1 if the EA file is valid and successfully opened, 0 otherwise. */ static int process_ea_header(AVFormatContext *s) { uint32_t blockid, size = 0; EaDemuxContext *ea = s->priv_data; AVIOContext *pb = s->pb; int i; for (i = 0; i < 5 && (!ea->audio_codec || !ea->video.codec); i++) { uint64_t startpos = avio_tell(pb); int err = 0; blockid = avio_rl32(pb); size = avio_rl32(pb); if (i == 0) ea->big_endian = size > av_bswap32(size); if (ea->big_endian) size = av_bswap32(size); if (size < 8) { av_log(s, AV_LOG_ERROR, "chunk size too small\n"); return AVERROR_INVALIDDATA; } switch (blockid) { case ISNh_TAG: if (avio_rl32(pb) != EACS_TAG) { avpriv_request_sample(s, "unknown 1SNh headerid"); return 0; } process_audio_header_eacs(s); break; case SCHl_TAG: case SHEN_TAG: blockid = avio_rl32(pb); if (blockid == GSTR_TAG) { avio_skip(pb, 4); } else if ((blockid & 0xFF) != (PT00_TAG & 0xFF)) { blockid = avio_rl32(pb); } ea->platform = (blockid >> 16) & 0xFF; err = process_audio_header_elements(s); break; case SEAD_TAG: process_audio_header_sead(s); break; case MVIh_TAG: process_video_header_cmv(s, &ea->video); break; case kVGT_TAG: ea->video.codec = AV_CODEC_ID_TGV; break; case mTCD_TAG: process_video_header_mdec(s, &ea->video); break; case MPCh_TAG: ea->video.codec = AV_CODEC_ID_MPEG2VIDEO; break; case pQGT_TAG: case TGQs_TAG: ea->video.codec = AV_CODEC_ID_TGQ; ea->video.time_base = (AVRational) { 1, 15 }; break; case pIQT_TAG: ea->video.codec = AV_CODEC_ID_TQI; ea->video.time_base = (AVRational) { 1, 15 }; break; case MADk_TAG: ea->video.codec = AV_CODEC_ID_MAD; avio_skip(pb, 6); ea->video.time_base = (AVRational) { avio_rl16(pb), 1000 }; break; case MVhd_TAG: err = process_video_header_vp6(s, &ea->video); break; case AVhd_TAG: err = process_video_header_vp6(s, &ea->alpha); break; } if (err < 0) { av_log(s, AV_LOG_ERROR, "error parsing header: %i\n", err); return err; } avio_seek(pb, startpos + size, SEEK_SET); } avio_seek(pb, 0, SEEK_SET); return 1; }
int main() { int derp; FILE *file = NULL; char str[33]; char str2[33]; uint64_t fsize; uint8_t left; uint32_t frames; file = fopen("sola OP1.dvi", "rb"); fseek(file, 0L, SEEK_END); fsize = ftell(file); fseek(file, 0L, SEEK_SET); left = fsize % 16; frames = fsize / 16; snprintf(str, sizeof str, "%" PRIu64, fsize); printf( "File size: %s\n", str ); snprintf(str, sizeof str, "%" PRIu8, left); printf( "Left: %s\n", str ); snprintf(str, sizeof str, "%" PRIu32, frames); printf( "Amount of frames: %s\n\n", str ); frame_index index[frames]; for( uint32_t i = 0; i < frames; i++ ) { derp = fread( &index[i].offset, sizeof(uint32_t), 1, file ); if( derp != 1 ) { printf( "Derped\n" ); return 1; } index[i].offset = av_bswap32(index[i].offset); index[i].offset *= 4096; derp = fread( &index[i].size, sizeof(uint16_t), 1, file ); if( derp != 1 ) { printf( "Derped\n" ); return 1; } index[i].size = av_bswap16(index[i].size); index[i].size *= 4096; derp = fread( &index[i].frames_until_earlier, sizeof(uint16_t)+sizeof(uint32_t), 1, file ); if( derp != 1 ) { printf( "Derped\n" ); return 1; } index[i].frames_until_earlier = av_bswap64(index[i].frames_until_earlier); derp = fread( &index[i].aframe_count, sizeof(uint16_t), 1, file ); if( derp != 1 ) { printf( "Derped\n" ); return 1; } index[i].aframe_count = av_bswap16(index[i].aframe_count); derp = fread( &index[i].quality, sizeof(uint8_t), 1, file ); if( derp != 1 ) { printf( "Derped\n" ); return 1; } derp = fread( &index[i].reserved, sizeof(uint8_t), 1, file ); if( derp != 1 ) { printf( "Derped\n" ); return 1; } // snprintf(str2, sizeof str2, "%" PRIu32, i); // snprintf(str, sizeof str, "%" PRIu64, index[i].offset); // printf( "[frame %s] : Offset %s\n", str2, str ); // snprintf(str, sizeof str, "%" PRIu16, index[i].size); // printf( "[frame %s] : Size: %s\n", str2, str ); // snprintf(str, sizeof str, "%" PRIu64, index[i].frames_until_earlier); // printf( "[frame %s] : FuE: %s\n", str2, str ); // snprintf(str, sizeof str, "%" PRIu16, index[i].aframe_count); // printf( "[frame %s] : Amount of AFrames: %s\n", str2, str ); // snprintf(str, sizeof str, "%" PRIu8, index[i].quality); // printf( "[frame %s] : Quality: %s\n", str2, str ); } fclose(file); return 0; }
/* Process EA file header. * Return 1 if the EA file is valid and successfully opened, 0 otherwise. */ static int process_ea_header(AVFormatContext *s) { uint32_t blockid, size = 0; EaDemuxContext *ea = s->priv_data; AVIOContext *pb = s->pb; int i; for (i = 0; i < 5 && (!ea->audio_codec || !ea->video_codec); i++) { unsigned int startpos = avio_tell(pb); int err = 0; blockid = avio_rl32(pb); size = avio_rl32(pb); if (i == 0) ea->big_endian = size > 0x000FFFFF; if (ea->big_endian) size = av_bswap32(size); switch (blockid) { case ISNh_TAG: if (avio_rl32(pb) != EACS_TAG) { avpriv_request_sample(s, "unknown 1SNh headerid"); return 0; } process_audio_header_eacs(s); break; case SCHl_TAG: case SHEN_TAG: blockid = avio_rl32(pb); if (blockid == GSTR_TAG) { avio_skip(pb, 4); } else if ((blockid & 0xFFFF) != PT00_TAG) { avpriv_request_sample(s, "unknown SCHl headerid"); return 0; } err = process_audio_header_elements(s); break; case SEAD_TAG: process_audio_header_sead(s); break; case MVIh_TAG: process_video_header_cmv(s); break; case kVGT_TAG: ea->video_codec = AV_CODEC_ID_TGV; break; case mTCD_TAG: process_video_header_mdec(s); break; case MPCh_TAG: ea->video_codec = AV_CODEC_ID_MPEG2VIDEO; break; case pQGT_TAG: case TGQs_TAG: ea->video_codec = AV_CODEC_ID_TGQ; break; case pIQT_TAG: ea->video_codec = AV_CODEC_ID_TQI; break; case MADk_TAG: ea->video_codec = AV_CODEC_ID_MAD; break; case MVhd_TAG: err = process_video_header_vp6(s); break; } if (err < 0) { av_log(s, AV_LOG_ERROR, "error parsing header: %i\n", err); return err; } avio_seek(pb, startpos + size, SEEK_SET); } avio_seek(pb, 0, SEEK_SET); return 1; }
static int dpx_parse(AVCodecParserContext *s, AVCodecContext *avctx, const uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size) { DPXParseContext *d = s->priv_data; uint32_t state = d->pc.state; int next = END_NOT_FOUND; int i = 0; s->pict_type = AV_PICTURE_TYPE_I; *poutbuf_size = 0; if (buf_size == 0) next = 0; if (!d->pc.frame_start_found) { for (; i < buf_size; i++) { state = (state << 8) | buf[i]; if (state == MKBETAG('S','D','P','X') || state == MKTAG('S','D','P','X')) { d->pc.frame_start_found = 1; d->is_be = state == MKBETAG('S','D','P','X'); d->index = 0; break; } } d->pc.state = state; } else { if (d->remaining_size) { i = FFMIN(d->remaining_size, buf_size); d->remaining_size -= i; if (d->remaining_size) goto flush; } } for (; d->pc.frame_start_found && i < buf_size; i++) { d->pc.state = (d->pc.state << 8) | buf[i]; d->index++; if (d->index == 17) { d->fsize = d->is_be ? d->pc.state : av_bswap32(d->pc.state); if (d->fsize <= 1664) { d->pc.frame_start_found = 0; goto flush; } if (d->fsize > buf_size - i + 19) d->remaining_size = d->fsize - buf_size + i - 19; else i += d->fsize - 19; break; } else if (d->index > 17) { if (d->pc.state == MKBETAG('S','D','P','X') || d->pc.state == MKTAG('S','D','P','X')) { next = i - 3; break; } } } flush: if (ff_combine_frame(&d->pc, next, &buf, &buf_size) < 0) return buf_size; d->pc.frame_start_found = 0; *poutbuf = buf; *poutbuf_size = buf_size; return next; }