S3_HLS_H264E_NALU_TYPE_E S3_HLS_H264_Nalu_Type()

in S3_HLS_H264_Nalu_Types.c [28:60]


S3_HLS_H264E_NALU_TYPE_E S3_HLS_H264_Nalu_Type(S3_HLS_FRAME_ITEM* item) {
    if(NULL == item->second_part_start && 0 != item->second_part_length) {
        return S3_HLS_H264E_NALU_UNSPECIFIED;
    }

    if(S3_HLS_NALU_BYTE_POS > item->first_part_length + item->second_part_length) {
        return S3_HLS_H264E_NALU_UNSPECIFIED;
    }
    
    int i = 0;
    while(i < item->first_part_length && i < S3_HLS_NALU_BYTE_POS - 1) {
        if(h264_start_code[i] != item->first_part_start[i]) {
            return S3_HLS_H264E_NALU_UNSPECIFIED;
        }
        
        i++;
    }
    
    while(i < S3_HLS_NALU_BYTE_POS - 1) {
        // only enter this piece of code when first part length is not enought for finding the nalu byte
        if(h264_start_code[i] != item->second_part_start[i - item->first_part_length]){
            return S3_HLS_H264E_NALU_UNSPECIFIED;
        }
        
        i++;
    }
    
    if(i > item->first_part_length) {
        return item->second_part_start[i - item->first_part_length] & S3_HLS_H264_NALU_BITS;
    } else {
        return item->first_part_start[i] & S3_HLS_H264_NALU_BITS;
    }
}