shithub: openh264

Download patch

ref: 01a502764025248c3f6fc15c0f9e2a551dec6272
parent: e793bd35046a35569bc1b3db3be463912dea0582
author: xiaotianshi2 <[email protected]>
date: Sun Sep 13 06:21:04 EDT 2020

update readFrame for thread-decoding test and unit test cases.

--- a/test/BaseThreadDecoderTest.h
+++ b/test/BaseThreadDecoderTest.h
@@ -40,7 +40,6 @@
   bool ThreadDecodeFile (const char* fileName, Callback* cbk);
 
   bool Open (const char* fileName);
-  bool DecodeNextFrame (Callback* cbk);
   ISVCDecoder* decoder_;
 
  private:
@@ -48,8 +47,6 @@
   void FlushFrame (Callback* cbk);
 
   std::ifstream file_;
-  BufferedData buf_;
-  BufferedData buf[16];
   SBufferInfo sBufInfo;
   uint8_t* pData[3];
   uint64_t uiTimeStamp;
--- a/test/api/BaseThreadDecoderTest.cpp
+++ b/test/api/BaseThreadDecoderTest.cpp
@@ -5,6 +5,102 @@
 #include "utils/BufferedData.h"
 #include "BaseThreadDecoderTest.h"
 
+static int32_t readBit (uint8_t* pBufPtr, int32_t& curBit) {
+  int nIndex = curBit / 8;
+  int nOffset = curBit % 8 + 1;
+
+  curBit++;
+  return (pBufPtr[nIndex] >> (8 - nOffset)) & 0x01;
+}
+
+static int32_t readBits (uint8_t* pBufPtr, int32_t& n, int32_t& curBit) {
+  int r = 0;
+  int i;
+  for (i = 0; i < n; i++) {
+    r |= (readBit (pBufPtr, curBit) << (n - i - 1));
+  }
+  return r;
+}
+
+static int32_t bsGetUe (uint8_t* pBufPtr, int32_t& curBit) {
+  int r = 0;
+  int i = 0;
+  while ((readBit (pBufPtr, curBit) == 0) && (i < 32)) {
+    i++;
+  }
+  r = readBits (pBufPtr, i, curBit);
+  r += (1 << i) - 1;
+  return r;
+}
+
+static int32_t readFirstMbInSlice (uint8_t* pSliceNalPtr) {
+  int32_t curBit = 0;
+  int32_t firstMBInSlice = bsGetUe (pSliceNalPtr + 1, curBit);
+  return firstMBInSlice;
+}
+
+static int32_t ReadFrame (uint8_t* pBuf, const int32_t& iFileSize, const int32_t& bufPos) {
+  int32_t bytes_available = iFileSize - bufPos;
+  if (bytes_available < 4) {
+    return bytes_available;
+  }
+  uint8_t* ptr = pBuf + bufPos;
+  int32_t read_bytes = 0;
+  int32_t sps_count = 0;
+  int32_t pps_count = 0;
+  int32_t non_idr_pict_count = 0;
+  int32_t idr_pict_count = 0;
+  int32_t nal_deliminator = 0;
+  while (read_bytes < bytes_available - 4) {
+    bool has4ByteStartCode = ptr[0] == 0 && ptr[1] == 0 && ptr[2] == 0 && ptr[3] == 1;
+    bool has3ByteStartCode = false;
+    if (!has4ByteStartCode) {
+      has3ByteStartCode = ptr[0] == 0 && ptr[1] == 0 && ptr[2] == 1;
+    }
+    if (has4ByteStartCode || has3ByteStartCode) {
+      int32_t byteOffset = has4ByteStartCode ? 4 : 3;
+      uint8_t nal_unit_type = has4ByteStartCode ? (ptr[4] & 0x1F) : (ptr[3] & 0x1F);
+      if (nal_unit_type == 1) {
+        int32_t firstMBInSlice = readFirstMbInSlice (ptr + byteOffset);
+        if (++non_idr_pict_count >= 1 && idr_pict_count >= 1 && firstMBInSlice == 0) {
+          return read_bytes;
+        }
+        if (non_idr_pict_count >= 2 && firstMBInSlice == 0) {
+          return read_bytes;
+        }
+      } else if (nal_unit_type == 5) {
+        int32_t firstMBInSlice = readFirstMbInSlice (ptr + byteOffset);
+        if (++idr_pict_count >= 1 && non_idr_pict_count >= 1 && firstMBInSlice == 0) {
+          return read_bytes;
+        }
+        if (idr_pict_count >= 2 && firstMBInSlice == 0) {
+          return read_bytes;
+        }
+      } else if (nal_unit_type == 7) {
+        if ((++sps_count >= 1) && (non_idr_pict_count >= 1 || idr_pict_count >= 1)) {
+          return read_bytes;
+        }
+        if (sps_count == 2) return read_bytes;
+      } else if (nal_unit_type == 8) {
+        if (++pps_count >= 1 && (non_idr_pict_count >= 1 || idr_pict_count >= 1)) return read_bytes;
+      } else if (nal_unit_type == 9) {
+        if (++nal_deliminator == 2) {
+          return read_bytes;
+        }
+      }
+      if (read_bytes >= bytes_available - 4) {
+        return bytes_available;
+      }
+      read_bytes += 4;
+      ptr += 4;
+    } else {
+      ++ptr;
+      ++read_bytes;
+    }
+  }
+  return bytes_available;
+}
+
 static void Write2File (FILE* pFp, unsigned char* pData[3], int iStride[2], int iWidth, int iHeight) {
   int   i;
   unsigned char*  pPtr = NULL;
@@ -42,121 +138,6 @@
   }
 }
 
-static bool ReadFrame (std::ifstream* file, BufferedData* buf) {
-  // start code of a frame is {0, 0, 1} or {0, 0, 0, 1}
-  char b;
-
-  buf->Clear();
-  int32_t sps_count = 0;
-  int32_t non_idr_pict_count = 0;
-  int32_t idr_pict_count = 0;
-  int32_t zeroCount = 0;
-  for (;;) {
-    file->read (&b, 1);
-    if (file->gcount() != 1) { // end of file
-      return true;
-    }
-    if (!buf->PushBack (b)) {
-      std::cout << "unable to allocate memory" << std::endl;
-      return false;
-    }
-    if (buf->Length() < 5) {
-      continue;
-    }
-    uint8_t nal_unit_type = 0;
-    int32_t startcode_len_plus_one = 0;
-    if (buf->Length() == 5) {
-      if (buf->data()[2] == 1) {
-        nal_unit_type = buf->data()[3] & 0x1F;
-      } else {
-        nal_unit_type = buf->data()[4] & 0x1F;
-      }
-    } else {
-      if (zeroCount < 2) {
-        zeroCount = b != 0 ? 0 : zeroCount + 1;
-      }
-      if (zeroCount == 2) {
-        file->read (&b, 1);
-        if (file->gcount() != 1) { // end of file
-          return true;
-        }
-        if (!buf->PushBack (b)) {
-          std::cout << "unable to allocate memory" << std::endl;
-          return false;
-        }
-        if (b == 1) { //0x000001
-          file->read (&b, 1);
-          if (file->gcount() != 1) { // end of file
-            return true;
-          }
-          if (!buf->PushBack (b)) {
-            std::cout << "unable to allocate memory" << std::endl;
-            return false;
-          }
-          nal_unit_type = b & 0x1F;
-          startcode_len_plus_one = 4;
-          zeroCount = 0;
-        } else if (b == 0) {
-          file->read (&b, 1);
-          if (file->gcount() != 1) { // end of file
-            return true;
-          }
-          if (!buf->PushBack (b)) {
-            std::cout << "unable to allocate memory" << std::endl;
-            return false;
-          }
-          if (b == 1) { //0x00000001
-            file->read (&b, 1);
-            if (file->gcount() != 1) { // end of file
-              return true;
-            }
-            if (!buf->PushBack (b)) {
-              std::cout << "unable to allocate memory" << std::endl;
-              return false;
-            }
-            nal_unit_type = b & 0x1F;
-            startcode_len_plus_one = 5;
-            zeroCount = 0;
-          } else {
-            zeroCount = 0;
-          }
-        } else {
-          zeroCount = 0;
-        }
-      }
-    }
-    if (nal_unit_type == 1) {
-      if (++non_idr_pict_count == 1 && idr_pict_count == 1) {
-        file->seekg (-startcode_len_plus_one, file->cur).good();
-        buf->SetLength (buf->Length() - startcode_len_plus_one);
-        return true;
-      }
-      if (non_idr_pict_count == 2) {
-        file->seekg (-startcode_len_plus_one, file->cur).good();
-        buf->SetLength (buf->Length() - startcode_len_plus_one);
-        return true;
-      }
-    } else if (nal_unit_type == 5) {
-      if (++idr_pict_count == 1 && non_idr_pict_count == 1) {
-        file->seekg (-startcode_len_plus_one, file->cur).good();
-        buf->SetLength (buf->Length() - startcode_len_plus_one);
-        return true;
-      }
-      if (idr_pict_count == 2) {
-        file->seekg (-startcode_len_plus_one, file->cur).good();
-        buf->SetLength (buf->Length() - startcode_len_plus_one);
-        return true;
-      }
-    } else if (nal_unit_type == 7) {
-      if ((++sps_count == 1) && (non_idr_pict_count == 1 || idr_pict_count == 1)) {
-        file->seekg (-startcode_len_plus_one, file->cur).good();
-        buf->SetLength (buf->Length() - startcode_len_plus_one);
-        return true;
-      }
-    }
-  }
-}
-
 BaseThreadDecoderTest::BaseThreadDecoderTest()
   : decoder_ (NULL), uiTimeStamp (0), pYuvFile (NULL), bEnableYuvDumpTest (false), decodeStatus_ (OpenFile) {
 }
@@ -272,6 +253,19 @@
   if (!file.is_open())
     return false;
 
+  BufferedData buf;
+  char b;
+  for (;;) {
+    file.read (&b, 1);
+    if (file.gcount() != 1) { // end of file
+      break;
+    }
+    if (!buf.PushBack (b)) {
+      std::cout << "unable to allocate memory" << std::endl;
+      return false;
+    }
+  }
+
   std::string outFileName = std::string (fileName);
   size_t pos = outFileName.find_last_of (".");
   if (bEnableYuvDumpTest) {
@@ -279,25 +273,23 @@
     pYuvFile = fopen (outFileName.c_str(), "wb");
   }
 
-  int iBufIndex = 0;
   uiTimeStamp = 0;
   memset (&sBufInfo, 0, sizeof (SBufferInfo));
-  while (true) {
-    if (false == ReadFrame (&file, &buf[iBufIndex]))
-      return false;
+  int32_t bufPos = 0;
+  int32_t bytesConsumed = 0;
+  int32_t fileSize = buf.Length();
+  while (bytesConsumed < fileSize) {
+    int32_t frameSize = ReadFrame (buf.data(), fileSize, bufPos);
     if (::testing::Test::HasFatalFailure()) {
       return false;
     }
-    if (buf[iBufIndex].Length() == 0) {
-      break;
-    }
-    DecodeFrame (buf[iBufIndex].data(), buf[iBufIndex].Length(), cbk);
+    uint8_t* frame_ptr = buf.data() + bufPos;
+    DecodeFrame (frame_ptr, frameSize, cbk);
     if (::testing::Test::HasFatalFailure()) {
       return false;
     }
-    if (++iBufIndex >= 16) {
-      iBufIndex = 0;
-    }
+    bufPos += frameSize;
+    bytesConsumed += frameSize;
   }
 
   int32_t iEndOfStreamFlag = 1;
@@ -322,37 +314,6 @@
       decodeStatus_ = Decoding;
       return true;
     }
-  }
-  return false;
-}
-
-bool BaseThreadDecoderTest::DecodeNextFrame (Callback* cbk) {
-  switch (decodeStatus_) {
-  case Decoding:
-    if (false == ReadFrame (&file_, &buf_))
-      return false;
-    if (::testing::Test::HasFatalFailure()) {
-      return false;
-    }
-    if (buf_.Length() == 0) {
-      decodeStatus_ = EndOfStream;
-      return true;
-    }
-    DecodeFrame (buf_.data(), buf_.Length(), cbk);
-    if (::testing::Test::HasFatalFailure()) {
-      return false;
-    }
-    return true;
-  case EndOfStream: {
-    int32_t iEndOfStreamFlag = 1;
-    decoder_->SetOption (DECODER_OPTION_END_OF_STREAM, &iEndOfStreamFlag);
-    DecodeFrame (NULL, 0, cbk);
-    decodeStatus_ = End;
-    break;
-  }
-  case OpenFile:
-  case End:
-    break;
   }
   return false;
 }
--- a/test/api/thread_decoder_test.cpp
+++ b/test/api/thread_decoder_test.cpp
@@ -96,57 +96,57 @@
   }
 }
 static const FileParam kFileParamArray[] = {
-  {"res/Adobe_PDF_sample_a_1024x768_50Frms.264", "041434a5819d1d903d49c0eda884b345e9f83596 9aa9a4d9598eb3e1093311826844f37c43e4c521"},
-  /*{"res/BA1_FT_C.264", "07490b43e8da6d9ef2fab066a0ac7491c7027297 3e7a012a01904cdc78c63ae20235665441b4e0a7"},
+  {"res/Adobe_PDF_sample_a_1024x768_50Frms.264", "041434a5819d1d903d49c0eda884b345e9f83596"},
+  //{"res/BA1_FT_C.264", "072ccfd92528f09ae8888cb5e023af511e1010a1"}, //multi hash values only in travis-ci build machine
   {"res/BA1_Sony_D.jsv", "37c9a951a0348d6abe1880b59e2b5a4d7d18c94c"},
-  {"res/BAMQ1_JVC_C.264", "6720462624f632f5475716ef32a7bbd12b3b428a 477b1e45e30661a138ff0b43c1ed3e00ded13d9c"},
-  {"res/BAMQ2_JVC_C.264", "5f0fbb0dab7961e782224f6887c83d4866fc1af8 e3dfdc770fa5fee8b92f896a92214886c109a688"},
+  {"res/BAMQ1_JVC_C.264", "6720462624f632f5475716ef32a7bbd12b3b428a"},
+  {"res/BAMQ2_JVC_C.264", "5f0fbb0dab7961e782224f6887c83d4866fc1af8"},
   {"res/BA_MW_D.264", "ace02cdce720bdb0698b40dc749a0e61fe0f590b"},
-  {"res/BANM_MW_D.264", "c51f1d2fa63dba4f5787f1b726c056d1c01d6ab9"},
-  {"res/BASQP1_Sony_C.jsv", "68e604b77e3f57f8ef1c2e450fcef03f5d2aee90 d5e1f122e8bf8d58bc6775d69b837db0d9ea3454"},
-  {"res/CI1_FT_B.264", "2e4d613dddd7c15d0daaaa60ffc038001dfad017 05cb35998476202eb4a3e67d4314c0cca5d743f6"},
+  //{"res/BANM_MW_D.264", "c51f1d2fa63dba4f5787f1b726c056d1c01d6ab9"}, //multi hash values only in travis-ci build machine
+  {"res/BASQP1_Sony_C.jsv", "2e10e98fc54f92cb5e72513bf417c4e4df333361"},
+  //{"res/CI1_FT_B.264", "721e555a33cfff81b6034a127334c5891776373c"}, //multi hash values only in travis-ci build machine
   {"res/CI_MW_D.264", "49a8916edd3e571efad328f2784fbe6aec5570d7"},
-  {"res/CVFC1_Sony_C.jsv", "109dfc8357a98b16aa74469a5506e362e563aa85 7d2a1c2e863baaaefff70ca4e6a62cb16f8792b2"},
+  {"res/CVFC1_Sony_C.jsv", "5cc447bb7906d5b9858cc7092aaf491035861660"},
   {"res/CVPCMNL1_SVA_C.264", "c2b0d964de727c64b9fccb58f63b567c82bda95a"},
-  //{"res/LS_SVA_D.264", "72118f4d1674cf14e58bed7e67cb3aeed3df62b9"}, //DPB buffer is too small
+  //{"res/LS_SVA_D.264", "e020a1c6668501887bb55e00741ebfdbc91d400d"}, //Multi-thread decoding hanging due to high pSps->iNumRefFrames which is 15
   {"res/MIDR_MW_D.264", "aeded2be7b97484cbf25f367ec34208f2220a8ab"},
   {"res/MPS_MW_A.264", "b0fce28218e678d89f464810f88b143ada49dd06"},
-  //{"res/MR1_BT_A.h264", "eebd1d7cdb67df5b8688b1ce18f6acae129b32e6 d20e96f9ecc2e24c13eb25b1c786da53eb716327"}, three hash values temp disabled
+  //{"res/MR1_BT_A.h264", "7f6d806f12d19ec991182467e801a78fb4f80e04"}, //multi hash values only in travis-ci build machine
   {"res/MR1_MW_A.264", "14d8ddb12ed711444039329db29c496b079680ba"},
-  //{"res/MR2_MW_A.264", "6d332a653fe3b923eb3af8f3695d46ce2a1d4b2c e379caa57c0c60ca6d6091c19815c7422e3c59c7 34f0359290b9e83be82ea2f8e763d920ec446b7b 14a38e41f4dbf924b8eff6e96aad77394c8aabcd"},
-  //{"res/MR2_TANDBERG_E.264", "74d618bc7d9d41998edf4c85d51aa06111db6609"}, //DPB buffer is too small
+  //{"res/MR2_MW_A.264", "6d332a653fe3b923eb3af8f3695d46ce2a1d4b2c"}, //multi hash values
+  //{"res/MR2_TANDBERG_E.264", "74d618bc7d9d41998edf4c85d51aa06111db6609"}, //Multi-thread decoding hanging due to high pSps->iNumRefFrames which is 15
   {"res/NL1_Sony_D.jsv", "e401e30669938443c2f02522fd4d5aa1382931a0"},
-  {"res/NLMQ1_JVC_C.264", "f3265c6ddf8db1b2bf604d8a2954f75532e28cda a86ec7a843e93f44aaee2619a7932c6c5c8d233f"},
-  {"res/NLMQ2_JVC_C.264", "350ae86ef9ba09390d63a09b7f9ff54184109ca8 95e6e4426b75f38a6744f3d04cfc62a2c0489354"},
-  {"res/NRF_MW_E.264", "866f267afd2ed1595bcb90de0f539e929c169aa4 db2d135cef07db8247ef858daf870d07955b912a"},
+  {"res/NLMQ1_JVC_C.264", "f3265c6ddf8db1b2bf604d8a2954f75532e28cda"},
+  {"res/NLMQ2_JVC_C.264", "350ae86ef9ba09390d63a09b7f9ff54184109ca8"},
+  {"res/NRF_MW_E.264", "866f267afd2ed1595bcb90de0f539e929c169aa4"},
   {"res/QCIF_2P_I_allIPCM.264", "9879ce127d3263cfbaf5211ab6657dbf0ccabea8"},
-  { "res/SVA_BA1_B.264", "4cb45a99ae44a0a98b174efd66245daa1fbaeb47 e9127875b268f9e7da4c495799b9972b8e72cf7b"},
-  {"res/SVA_BA2_D.264", "ac9e960015b96f83279840802f6637c61ee1c5b8 719fe839fa68b915b614fbbbae15edf492cc2133"},
-  {"res/SVA_Base_B.264", "a66d05c38b8f6e4e55e18237cac70b0c211a3b6e d8f923b278e6e9cbf51b495b29c2debe53526518"},
+  { "res/SVA_BA1_B.264", "4cb45a99ae44a0a98b174efd66245daa1fbaeb47"},
+  {"res/SVA_BA2_D.264", "ac9e960015b96f83279840802f6637c61ee1c5b8"},
+  {"res/SVA_Base_B.264", "e6010d1b47aa796c1f5295b2563ed696aa9c37ab"},
   {"res/SVA_CL1_E.264", "4fe09ab6cdc965ea10a20f1d6dd38aca954412bb"},
-  {"res/SVA_FM1_E.264", "9aea4ea84c75adbdf884dcab3705ed5a96406e85 dc22699d39caf9eb1d32ecd4966869578d24cd86"},
+  {"res/SVA_FM1_E.264", "1a114fbd096f637acd0c3fb8f35bdfa3bc275199"},
   {"res/SVA_NL1_B.264", "6d63f72a0c0d833b1db0ba438afff3b4180fb3e6"},
   {"res/SVA_NL2_E.264", "70453ef8097c94dd190d6d2d1d5cb83c67e66238"},
-  //{"res/SarVui.264", "1843d19d8e13588ef5de2d647804ae141e55cf72 719fe839fa68b915b614fbbbae15edf492cc2133"}, //same as "res/SVA_BA1_B.264"
-  {"res/Static.264", "d865faee7df56a8f532b7baeacb814483b8be148 52af285a888b8c9e04dc9f38fd61105e805ada3a 1b6313262bff9c329aaf7dd3582525bd609c3974"},
+  {"res/SarVui.264", "ac9e960015b96f83279840802f6637c61ee1c5b8"},
+  {"res/Static.264", "1310f9a1d7d115eec8155d071b9b45b5cfbf8321"},
   {"res/Zhling_1280x720.264", "10f9c803e80b51786f7833255afc3ef75c5c1339"},
   {"res/sps_subsetsps_bothVUI.264", "d65a34075c452196401340c554e83225c9454397"},
-  //{"res/test_cif_I_CABAC_PCM.264", "dfe2f87ac76bdb58e227267907a2eeccf04715ad 02ac993be06b5d88118beb96ee5dfd0995b7cb00 95fdf21470d3bbcf95505abb2164042063a79d98 c2b42f489ca9c2ebc43c0ab2238551a0c958a692"},
-  {"res/test_cif_I_CABAC_slice.264", "4260cc7a211895341092b0361bcfc3f13721ab44 106da52c2c6d30255b6ac0aa0b4a881a06ebb762"},
-  //{"res/test_cif_P_CABAC_slice.264", "ac2d1e9ca0e097ab44a4b592a93e06e5c0c3d761 276a5ccef4bbe20ad9c769824aea5553acc7b54a 8ba773ccf5f682a4a90b0d070aa4198a5cfa0220 b09e066f797235fed8f59c408b5914d143f71c9e"},
+  //{"res/test_cif_I_CABAC_PCM.264", "95fdf21470d3bbcf95505abb2164042063a79d98"}, //multi hash values only in travis-ci build machine
+  //{"res/test_cif_I_CABAC_slice.264", "a7154eb1d0909eb9fd1e4e89f5d6271e5201814b"}, //multi hash values only in travis-ci build machine
+  //{"res/test_cif_P_CABAC_slice.264", "b08bcf1056458ae113d0a55f35e6b00eb2bd7811"},//multi hash values only in travis-ci build machine
   {"res/test_qcif_cabac.264", "c79e9a32e4d9e38a1bd12079da19dcb0d2efe539"},
   {"res/test_scalinglist_jm.264", "b36efd05c8b17faa23f1c071b92aa5d55a5a826f"},
   {"res/test_vd_1d.264", "15d8beaf991f9e5d56a854cdafc0a7abdd5bec69"},
   {"res/test_vd_rc.264", "cd6ef57fc884e5ecd9867591b01e35e3f091b8d0"},
-  {"res/Cisco_Men_whisper_640x320_CABAC_Bframe_9.264", "7df59855104a319b44a7611dd6c37b1670bf74c9 f5593d374e8f68b1c882d407d961d80cf10ba737"},
-  {"res/Cisco_Men_whisper_640x320_CAVLC_Bframe_9.264", "0d77e3c53f46d8962cd95b975e76d0f32613da0f 67eec8abb0b22ff0f00d06c769b8a2e44cec33cf"},
-  {"res/Cisco_Adobe_PDF_sample_a_1024x768_CAVLC_Bframe_9.264", "6cac61a6b58bba59b8e9944b18aba2df20efeca2"},
-  {"res/VID_1280x544_cabac_temporal_direct.264", "e8ee8dd56ec5df1338f3c21ed8690d074c7ec03f"},
-  {"res/VID_1280x720_cabac_temporal_direct.264", "1efa6aec8c5f953c53d713c31999420fdbd10b22"},
-  {"res/VID_1920x1080_cabac_temporal_direct.264", "90b3f1cf0c85b490108a2db40d2b2151ee346dfb aafd2606e8fe8be2a956deed48218c9f5176b3d0"},
-  {"res/VID_1280x544_cavlc_temporal_direct.264", "fe779025f3b42d6fc3590476cb3594540950d716"},
-  {"res/VID_1280x720_cavlc_temporal_direct.264", "1c5afab7cfeb082b087821d4220d57238c1c161f"},
-  {"res/VID_1920x1080_cavlc_temporal_direct.264", "5c47d30fed9d2988c653b2c3bc83f6d19dfa5ab1 eecd84b68f416270eb21c6c90a4cef8603d37e25"},*/
+  {"res/Cisco_Men_whisper_640x320_CABAC_Bframe_9.264", "5d3d08fb47ac8c6e379c1572aed517522d883920"},
+  {"res/Cisco_Men_whisper_640x320_CAVLC_Bframe_9.264", "89742b454cac4843e0bf18a3df9b46f21155b48a"},
+  {"res/Cisco_Adobe_PDF_sample_a_1024x768_CAVLC_Bframe_9.264", "5fce0b92c5f2a1636ea06ae48ea208908fd01416"},
+  {"res/VID_1280x544_cabac_temporal_direct.264", "ae5f21eff917d09d5a1ba2ad2075edd92eb6b61c"},
+  //{"res/VID_1280x720_cabac_temporal_direct.264", "2597181429a48740a143053a5b027dcbe4173f4e"}, // hangs only on travis - ci build machine
+  {"res/VID_1920x1080_cabac_temporal_direct.264", "8c93ae9acfdf6d902c1a47102d4bf3294f45c0f3"},
+  {"res/VID_1280x544_cavlc_temporal_direct.264", "d9b31a2586ee156fe697de5934afb5a769f79494"},
+  {"res/VID_1280x720_cavlc_temporal_direct.264", "888c31cef73eb6804e2469fa77e51636c915ff82"},
+  {"res/VID_1920x1080_cavlc_temporal_direct.264", "4467039825f472bae31e58b383b1f2c9a73ce8e0"},
 };
 
 INSTANTIATE_TEST_CASE_P (ThreadDecodeFile, ThreadDecoderOutputTest,