! ************************************************************************************* * \brief Start Code Prefix (0x 00 00 00 01) detection * * \param pBuf bitstream payload buffer * \param pOffset offset between NAL rbsp and original bitsteam that * start code prefix is seperated from. * \param iBufSize count size of buffer * * \return RBSP b
| 64 | ************************************************************************************* |
| 65 | */ |
| 66 | uint8_t* DetectStartCodePrefix (const uint8_t* kpBuf, int32_t* pOffset, int32_t iBufSize) { |
| 67 | uint8_t* pBits = (uint8_t*)kpBuf; |
| 68 | |
| 69 | do { |
| 70 | int32_t iIdx = 0; |
| 71 | while ((iIdx < iBufSize) && (! (*pBits))) { |
| 72 | ++ pBits; |
| 73 | ++ iIdx; |
| 74 | } |
| 75 | if (iIdx >= iBufSize) break; |
| 76 | |
| 77 | ++ iIdx; |
| 78 | ++ pBits; |
| 79 | |
| 80 | if ((iIdx >= 3) && ((* (pBits - 1)) == 0x1)) { |
| 81 | *pOffset = (int32_t) (((uintptr_t)pBits) - ((uintptr_t)kpBuf)); |
| 82 | return pBits; |
| 83 | } |
| 84 | |
| 85 | iBufSize -= iIdx; |
| 86 | } while (1); |
| 87 | |
| 88 | return NULL; |
| 89 | } |
| 90 | |
| 91 | /*! |
| 92 | ************************************************************************************* |