www.pudn.com > wm2.5.zip > nal.c
/*! ************************************************************************************** * \file * nal.c * WJP FOR NAL *************************************************************************************** */ #include#include #include #include "define.h" #include "global.h" #include "nalu.h" extern void no_mem_exit(char *where); /*! ************************************************************************************* * \brief * Allocates memory for a NALU * * \param buffersize * size of NALU buffer * * \return * pointer to a NALU ************************************************************************************* */ NALU_t *AllocNALU(int buffersize) { NALU_t *n; if ((n = (NALU_t*)calloc (1, sizeof (NALU_t))) == NULL) no_mem_exit ("AllocNALU: n"); if ((n->buf = (Byte*)calloc (buffersize, sizeof (Byte))) == NULL) no_mem_exit ("AllocNALU: n->buf"); return n; } /*! ************************************************************************************* * \brief * Frees a NALU * * \param n * NALU to be freed * ************************************************************************************* */ void FreeNALU(NALU_t *n) { if (n) { if (n->buf) { free(n->buf); n->buf=NULL; } free (n); } } /*! ************************************************************************ * name: Form_NALU * \brief * This function forms a NALU * * \param NAL_type * the type of the NALU * \param NAL_ref_idc * the ref_idc of the NALU * \param streamBuffer * pointer to data bits * \param len_data_seq * Size of streamBuffer in bytes. * \return * Size of NALU in byte. * author: Wang Jianpeng * ************************************************************************ */ int Form_NALU(NALU_t *nalu, int NAL_type, int NAL_ref_idc, Byte *streamBuffer, int len_data_seq) { nalu->len = len_data_seq + 1; nalu->forbidden_bit = 0; nalu->nal_reference_idc = NAL_ref_idc; nalu->nal_unit_type = NAL_type; nalu->buf[0] = nalu->forbidden_bit << 7 | nalu->nal_reference_idc << 5 | nalu->nal_unit_type; memcpy (&nalu->buf[1], streamBuffer, len_data_seq); return len_data_seq + 1; } /*! ************************************************************************ * \name: Write_NALU2File * \brief * This function writes the NALU to the output file * author: Wang Jianpeng * ************************************************************************ */ int Write_NALU2File(NALU_t *nalu, FILE *f) { assert (nalu != NULL); assert (nalu->forbidden_bit == 0); assert (f != NULL); putc (0, f); putc (0, f); putc (1, f); if (nalu->len != fwrite (nalu->buf, 1, nalu->len, f)) { printf ("Fatal: cannot write %d bytes to bitstream file, exit (-1)\n", nalu->len); exit (-1); } fflush (f); return nalu->len + 3; }