URL
https://opencores.org/ocsvn/bluespec-h264/bluespec-h264/trunk
Subversion Repositories bluespec-h264
[/] [bluespec-h264/] [trunk/] [test/] [decoder/] [ldecod/] [src/] [nal.c] - Rev 14
Go to most recent revision | Compare with Previous | Blame | View Log
/*! ************************************************************************ * \file nal.c * * \brief * Converts Encapsulated Byte Sequence Packets (EBSP) to Raw Byte * Sequence Packets (RBSP), and then onto String Of Data Bits (SODB) * * \author * Main contributors (see contributors.h for copyright, address and affiliation details) * - Shankar L. Regunathan <shanre@microsoft.com> ************************************************************************ */ #include "contributors.h" #include <assert.h> #include <stdlib.h> #include <math.h> #include <string.h> #include "defines.h" #include "global.h" /*! ************************************************************************ * \brief * Converts RBSP to string of data bits * \param streamBuffer * pointer to buffer containing data * \param last_byte_pos * position of the last byte containing data. * \return last_byte_pos * position of the last byte pos. If the last-byte was entirely a stuffing byte, * it is removed, and the last_byte_pos is updated. * ************************************************************************/ int RBSPtoSODB(byte *streamBuffer, int last_byte_pos) { int ctr_bit, bitoffset; bitoffset = 0; //find trailing 1 ctr_bit = (streamBuffer[last_byte_pos-1] & (0x01<<bitoffset)); // set up control bit while (ctr_bit==0) { // find trailing 1 bit bitoffset++; if(bitoffset == 8) { if(last_byte_pos == 0) printf(" Panic: All zero data sequence in RBSP \n"); assert(last_byte_pos != 0); last_byte_pos -= 1; bitoffset = 0; } ctr_bit= streamBuffer[last_byte_pos-1] & (0x01<<(bitoffset)); } // We keep the stop bit for now /* if (remove_stop) { streamBuffer[last_byte_pos-1] -= (0x01<<(bitoffset)); if(bitoffset == 7) return(last_byte_pos-1); else return(last_byte_pos); } */ return(last_byte_pos); } /*! ************************************************************************ * \brief * Converts Encapsulated Byte Sequence Packets to RBSP * \param streamBuffer * pointer to data stream * \param end_bytepos * size of data stream * \param begin_bytepos * Position after beginning ************************************************************************/ int EBSPtoRBSP(byte *streamBuffer, int end_bytepos, int begin_bytepos) { int i, j, count; count = 0; if(end_bytepos < begin_bytepos) return end_bytepos; j = begin_bytepos; for(i = begin_bytepos; i < end_bytepos; i++) { //starting from begin_bytepos to avoid header information if(count == ZEROBYTES_SHORTSTARTCODE && streamBuffer[i] == 0x03) { i++; count = 0; } streamBuffer[j] = streamBuffer[i]; if(streamBuffer[i] == 0x00) count++; else count = 0; j++; } return j; }
Go to most recent revision | Compare with Previous | Blame | View Log