nsresult AppleVTDecoder::Input(mp4_demuxer::MP4Sample* aSample) { LOG("mp4 input sample %p pts %lld duration %lld us%s %d bytes", aSample, aSample->composition_timestamp, aSample->duration, aSample->is_sync_point ? " keyframe" : "", aSample->size); #ifdef LOG_MEDIA_SHA1 SHA1Sum hash; hash.update(aSample->data, aSample->size); uint8_t digest_buf[SHA1Sum::kHashSize]; hash.finish(digest_buf); nsAutoCString digest; for (size_t i = 0; i < sizeof(digest_buf); i++) { digest.AppendPrintf("%02x", digest_buf[i]); } LOG(" sha1 %s", digest.get()); #endif // LOG_MEDIA_SHA1 mTaskQueue->Dispatch( NS_NewRunnableMethodWithArg<nsAutoPtr<mp4_demuxer::MP4Sample>>( this, &AppleVTDecoder::SubmitFrame, nsAutoPtr<mp4_demuxer::MP4Sample>(aSample))); return NS_OK; }
nsresult AppleVTDecoder::Input(MediaRawData* aSample) { LOG("mp4 input sample %p pts %lld duration %lld us%s %d bytes", aSample, aSample->mTime, aSample->mDuration, aSample->mKeyframe ? " keyframe" : "", aSample->mSize); #ifdef LOG_MEDIA_SHA1 SHA1Sum hash; hash.update(aSample->data, aSample->size); uint8_t digest_buf[SHA1Sum::kHashSize]; hash.finish(digest_buf); nsAutoCString digest; for (size_t i = 0; i < sizeof(digest_buf); i++) { digest.AppendPrintf("%02x", digest_buf[i]); } LOG(" sha1 %s", digest.get()); #endif // LOG_MEDIA_SHA1 nsCOMPtr<nsIRunnable> runnable = NS_NewRunnableMethodWithArg<nsRefPtr<MediaRawData>>( this, &AppleVTDecoder::SubmitFrame, nsRefPtr<MediaRawData>(aSample)); mTaskQueue->Dispatch(runnable.forget()); return NS_OK; }
int main() { SHA1Sum sum; SHA1Sum::Hash hash; sum.update(reinterpret_cast<const uint8_t*>(testV), sizeof(testV)); sum.finish(hash); static const uint8_t expected[20] = { 0xc8, 0xf2, 0x09, 0x59, 0x4e, 0x64, 0x40, 0xaa, 0x7b, 0xf7, 0xb8, 0xe0, 0xfa, 0x44, 0xb2, 0x31, 0x95, 0xad, 0x94, 0x81 }; static_assert(sizeof(expected) == sizeof(SHA1Sum::Hash), "expected-data size should be the same as the actual hash " "size"); for (size_t i = 0; i < SHA1Sum::HashSize; i++) MOZ_RELEASE_ASSERT(hash[i] == expected[i]); return 0; }