nalu.c
上传用户:hjq518
上传日期:2021-12-09
资源大小:5084k
文件大小:2k
源码类别:

Audio

开发平台:

Visual C++

  1. /*!
  2.  ************************************************************************
  3.  * file  nalu.c
  4.  *
  5.  * brief
  6.  *    Common NALU support functions
  7.  *
  8.  * author
  9.  *    Main contributors (see contributors.h for copyright, address and affiliation details)
  10.  *    - Stephan Wenger   <stewe@cs.tu-berlin.de>
  11.  ************************************************************************
  12.  */
  13. #include "global.h"
  14. #include "nalu.h"
  15. #include "nal.h"
  16. /*!
  17.  *************************************************************************************
  18.  * brief
  19.  *    Converts an RBSP to a NALU
  20.  *
  21.  * param rbsp
  22.  *    byte buffer with the rbsp
  23.  * param nalu
  24.  *    nalu structure to be filled
  25.  * param rbsp_size
  26.  *    size of the rbsp in bytes
  27.  * param nal_unit_type
  28.  *    as in JVT doc
  29.  * param nal_reference_idc
  30.  *    as in JVT doc
  31.  * param min_num_bytes
  32.  *    some incomprehensible CABAC stuff
  33.  * param UseAnnexbLongStartcode
  34.  *    when 1 and when using AnnexB bytestreams, then use a long startcode prefix
  35.  *
  36.  * return
  37.  *    length of the NALU in bytes
  38.  *************************************************************************************
  39.  */
  40. int RBSPtoNALU (unsigned char *rbsp, NALU_t *nalu, int rbsp_size, int nal_unit_type, int nal_reference_idc,
  41.                 int min_num_bytes, int UseAnnexbLongStartcode)
  42. {
  43.   int len;
  44.   assert (nalu != NULL);
  45.   assert (nal_reference_idc <=3 && nal_reference_idc >=0);
  46.   assert (nal_unit_type > 0 && nal_unit_type <= 10);
  47.   assert (rbsp_size < MAXRBSPSIZE);
  48.   
  49.   nalu->startcodeprefix_len = UseAnnexbLongStartcode ? 4 : 3;
  50.   nalu->forbidden_bit       = 0;  
  51.   nalu->nal_reference_idc   = (NalRefIdc) nal_reference_idc;
  52.   nalu->nal_unit_type       = (NaluType) nal_unit_type;    
  53.   len = RBSPtoEBSP (nalu->buf, rbsp, rbsp_size);
  54.   nalu->len = len;
  55.   return len;
  56. }