Ignore:
Timestamp:
Jun 8, 2017 6:23:56 AM (4 years ago)
Author:
ming
Message:

Fixed #2022: Video Toolbox H264 encoder and decoder for Mac and iOS

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/src/pjmedia-codec/h264_packetizer.c

    r4537 r5603  
    9595    if (cfg && 
    9696        cfg->mode != PJMEDIA_H264_PACKETIZER_MODE_NON_INTERLEAVED && 
    97         cfg->mode != PJMEDIA_H264_PACKETIZER_MODE_SINGLE_NAL) 
     97        cfg->mode != PJMEDIA_H264_PACKETIZER_MODE_SINGLE_NAL && 
     98        cfg->unpack_nal_start != 0 && cfg->unpack_nal_start != 3 && 
     99        cfg->unpack_nal_start != 4) 
    98100    { 
    99101        return PJ_ENOTSUP; 
     
    103105    if (cfg) { 
    104106        pj_memcpy(&p_->cfg, cfg, sizeof(*cfg)); 
     107        if (p_->cfg.unpack_nal_start == 0) 
     108            p_->cfg.unpack_nal_start = 3; 
    105109    } else { 
    106110        p_->cfg.mode = PJMEDIA_H264_PACKETIZER_MODE_NON_INTERLEAVED; 
    107111        p_->cfg.mtu = PJMEDIA_MAX_VID_PAYLOAD_SIZE; 
     112        p_->cfg.unpack_nal_start = 3; 
    108113    } 
    109114 
     
    348353                                             unsigned   *bits_pos) 
    349354{ 
    350     const pj_uint8_t nal_start_code[3] = {0, 0, 1}; 
     355    const pj_uint8_t nal_start[4] = {0, 0, 0, 1}; 
     356    const pj_uint8_t *nal_start_code;  
    351357    enum { MIN_PAYLOAD_SIZE = 2 }; 
    352358    pj_uint8_t nal_type; 
    353359 
    354     PJ_UNUSED_ARG(pktz); 
     360    nal_start_code = nal_start + PJ_ARRAY_SIZE(nal_start) - 
     361                     pktz->cfg.unpack_nal_start; 
    355362 
    356363#if DBG_UNPACKETIZE 
     
    385392 
    386393        /* Validate bitstream length */ 
    387         if (bits_len-*bits_pos < payload_len+PJ_ARRAY_SIZE(nal_start_code)) { 
     394        if (bits_len-*bits_pos < payload_len+pktz->cfg.unpack_nal_start) { 
    388395            /* Insufficient bistream buffer, discard this payload */ 
    389             pj_assert(!"Insufficient H.263 bitstream buffer"); 
     396            pj_assert(!"Insufficient H.264 bitstream buffer"); 
    390397            return PJ_ETOOSMALL; 
    391398        } 
    392399 
    393400        /* Write NAL unit start code */ 
    394         pj_memcpy(p, &nal_start_code, PJ_ARRAY_SIZE(nal_start_code)); 
    395         p += PJ_ARRAY_SIZE(nal_start_code); 
     401        pj_memcpy(p, nal_start_code, pktz->cfg.unpack_nal_start); 
     402        p += pktz->cfg.unpack_nal_start; 
    396403 
    397404        /* Write NAL unit */ 
     
    420427        if (bits_len - *bits_pos < payload_len + 32) { 
    421428            /* Insufficient bistream buffer, discard this payload */ 
    422             pj_assert(!"Insufficient H.263 bitstream buffer"); 
     429            pj_assert(!"Insufficient H.264 bitstream buffer"); 
    423430            return PJ_ETOOSMALL; 
    424431        } 
     
    433440 
    434441            /* Write NAL unit start code */ 
    435             pj_memcpy(p, &nal_start_code, PJ_ARRAY_SIZE(nal_start_code)); 
    436             p += PJ_ARRAY_SIZE(nal_start_code); 
     442            pj_memcpy(p, nal_start_code, pktz->cfg.unpack_nal_start); 
     443            p += pktz->cfg.unpack_nal_start; 
    437444 
    438445            /* Get NAL unit size */ 
     
    471478 
    472479        /* Validate bitstream length */ 
    473         if (bits_len-*bits_pos < payload_len+PJ_ARRAY_SIZE(nal_start_code)) { 
     480        if (bits_len-*bits_pos < payload_len+pktz->cfg.unpack_nal_start) { 
    474481            /* Insufficient bistream buffer, drop this packet */ 
    475             pj_assert(!"Insufficient H.263 bitstream buffer"); 
     482            pj_assert(!"Insufficient H.264 bitstream buffer"); 
    476483            pktz->unpack_prev_lost = PJ_TRUE; 
    477484            return PJ_ETOOSMALL; 
     
    487494        if (S) { 
    488495            /* This is the first part, write NAL unit start code */ 
    489             pj_memcpy(p, &nal_start_code, PJ_ARRAY_SIZE(nal_start_code)); 
    490             p += PJ_ARRAY_SIZE(nal_start_code); 
     496            pj_memcpy(p, nal_start_code, pktz->cfg.unpack_nal_start); 
     497            p += pktz->cfg.unpack_nal_start; 
    491498 
    492499            /* Write NAL unit octet */ 
Note: See TracChangeset for help on using the changeset viewer.