static int hash_write_header(struct AVFormatContext *s) { struct HashContext *c = s->priv_data; int res = av_hash_alloc(&c->hash, c->hash_name); if (res < 0) return res; av_hash_init(c->hash); return 0; }
static int framehash_write_packet(struct AVFormatContext *s, AVPacket *pkt) { struct HashContext *c = s->priv_data; char buf[256]; av_hash_init(c->hash); av_hash_update(c->hash, pkt->data, pkt->size); snprintf(buf, sizeof(buf) - 64, "%d, %10"PRId64", %10"PRId64", %8"PRId64", %8d, ", pkt->stream_index, pkt->dts, pkt->pts, pkt->duration, pkt->size); hash_finish(s, buf); return 0; }
static void framehash_print_extradata(struct AVFormatContext *s) { int i; for (i = 0; i < s->nb_streams; i++) { AVStream *st = s->streams[i]; AVCodecParameters *par = st->codecpar; if (par->extradata) { struct HashContext *c = s->priv_data; char buf[AV_HASH_MAX_SIZE*2+1]; avio_printf(s->pb, "#extradata %d, %31d, ", i, par->extradata_size); av_hash_init(c->hash); av_hash_update(c->hash, par->extradata, par->extradata_size); av_hash_final_hex(c->hash, buf, sizeof(buf)); avio_write(s->pb, buf, strlen(buf)); avio_printf(s->pb, "\n"); } } }