MCPcopy Create free account
hub / github.com/FFMS/ffms2 / CalculateFileSignature

Method CalculateFileSignature

src/core/indexing.cpp:46–68  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

44}
45
46void FFMS_Index::CalculateFileSignature(const char *Filename, int64_t *Filesize, uint8_t Digest[20]) {
47 FileHandle file(Filename, "rb", FFMS_ERROR_INDEX, FFMS_ERROR_FILE_READ);
48
49 std::unique_ptr<AVSHA, decltype(&av_free)> ctx{ av_sha_alloc(), av_free };
50 av_sha_init(ctx.get(), 160);
51
52 try {
53 *Filesize = file.Size();
54 std::vector<char> FileBuffer(static_cast<size_t>(std::min<int64_t>(1024 * 1024, *Filesize)));
55 size_t BytesRead = file.Read(FileBuffer.data(), FileBuffer.size());
56 av_sha_update(ctx.get(), reinterpret_cast<const uint8_t*>(FileBuffer.data()), BytesRead);
57
58 if (*Filesize > static_cast<int64_t>(FileBuffer.size())) {
59 file.Seek(*Filesize - static_cast<int64_t>(FileBuffer.size()), SEEK_SET);
60 BytesRead = file.Read(FileBuffer.data(), FileBuffer.size());
61 av_sha_update(ctx.get(), reinterpret_cast<const uint8_t*>(FileBuffer.data()), BytesRead);
62 }
63 } catch (...) {
64 av_sha_final(ctx.get(), Digest);
65 throw;
66 }
67 av_sha_final(ctx.get(), Digest);
68}
69
70void FFMS_Index::Finalize(std::vector<SharedAVContext> const& video_contexts, const char *Format) {
71 for (size_t i = 0, end = size(); i != end; ++i) {

Callers

nothing calls this directly

Calls 4

SizeMethod · 0.80
sizeMethod · 0.80
ReadMethod · 0.45
SeekMethod · 0.45

Tested by

no test coverage detected