access_flags

对于接口文件

public interface  interfaceName{

}

 

access_flags=ACC_PUBLIC|ACC_ABSTRACT|ACC_INTERFACE

ACC_PUBLIC=0x0000 0001

ACC_ABSTRACT=0x0000 0400

ACC_INTERFACE=0x0000 0200

access_flags=0x0000  0601

 

注意与 interface interfaceName{

}

是有区别的。

access_flags=ACC_ABSTRACT|ACC_INTERFACE=0x0000 0400 | 0x0000 0200=0x0000 0600

 

对类文件:

public class className{

}

一般情况下:

this_flags=ACC_PUBLIC |  ACC_SUPER =0x0000 00010 | x0000 0020 =0x0000 0021=32

 

 

public final class className{}

this_flags=ACC_PUBLIC|ACC_FINAL|ACC_SUPER=0x0000 0001 | 0x0000 0010 | 0x0000 0020

                =0x0000 0031=49 

ClassFile表内的access_flags项的标志位:

ACC_PUBLIC=       0x0000 0001                       类或者接口

ACC_FINAL=          0x0000  0010                      类(不能派生)

ACC_SUPER=       0x0000 0020                       类

ACC_INTERFACE= 0x0000 0200                      接口

ACC_ABSTRACT=  0x0000 0400                接口或者方法(抽象方法)

/*---------------------------------------------------------------------- | AP4_HevcFrameParser::CheckIfVPSDuplicated +---------------------------------------------------------------------*/ bool AP4_HevcFrameParser::CheckIfVPSDuplicated(const unsigned char* data, unsigned int data_size) { for (unsigned int i=0; i<=m_VPSMaxID; i++) { if (m_VPS[i]) { if (m_VPS[i]->raw_bytes.GetDataSize() == data_size && AP4_CompareMemory(m_VPS[i]->raw_bytes.GetData(), data, data_size) == 0) { return true; } } } return false; } /*---------------------------------------------------------------------- | AP4_HevcFrameParser::CheckIfAccessUnitIsCompleted +---------------------------------------------------------------------*/ void AP4_HevcFrameParser::CheckIfAccessUnitIsCompleted(AccessUnitInfo& access_unit_info) { if (!m_VclNalUnitsInAccessUnit || !m_CurrentSlice) { return; } DBG_PRINTF_0("\n>>>>>>> New Access Unit\n"); AP4_HevcSequenceParameterSet* sps = m_SPS[m_CurrentSlice->slice_pic_parameter_set_id]; if (sps == NULL) return; unsigned int MaxPicOrderCntLsb = (1 << (sps->log2_max_pic_order_cnt_lsb_minus4+4)); bool NoRaslOutputFlag = false; if (m_AccessUnitFlags & AP4_HEVC_ACCESS_UNIT_FLAG_IS_IRAP) { if ((m_AccessUnitFlags & AP4_HEVC_ACCESS_UNIT_FLAG_IS_IDR) || (m_AccessUnitFlags & AP4_HEVC_ACCESS_UNIT_FLAG_IS_BLA) /* TODO: check for end-of-sequence */) { NoRaslOutputFlag = true; } } unsigned int PrevPicOrderCntLsb = 0; unsigned int PrevPicOrderCntMsb = 0; if (!((m_AccessUnitFlags & AP4_HEVC_ACCESS_UNIT_FLAG_IS_IRAP) && NoRaslOutputFlag)) { PrevPicOrderCntLsb = m_PrevTid0Pic_PicOrderCntLsb; PrevPicOrderCntMsb = m_PrevTid0Pic_PicOrderCntMsb; } unsigned int PicOrderCntMsb = 0; if (m_CurrentSlice->slice_pic_order_cnt_lsb < PrevPicOrderCntLsb && (PrevPicOrderCntLsb - m_CurrentSlice->slice_pic_order_cnt_lsb) >= (MaxPicOrderCntLsb / 2)) { PicOrderCntMsb = PrevPicOrderCntMsb + MaxPicOrderCntLsb; } else if (m_CurrentSlice->slice_pic_order_cnt_lsb > PrevPicOrderCntLsb && (m_CurrentSlice->slice_pic_order_cnt_lsb - PrevPicOrderCntLsb) > (MaxPicOrderCntLsb / 2)) { PicOrderCntMsb = PrevPicOrderCntMsb - MaxPicOrderCntLsb; } else { PicOrderCntMsb = PrevPicOrderCntMsb; } if (m_CurrentNalUnitType == AP4_HEVC_NALU_TYPE_BLA_N_LP || m_CurrentNalUnitType == AP4_HEVC_NALU_TYPE_BLA_W_LP || m_CurrentNalUnitType == AP4_HEVC_NALU_TYPE_BLA_W_RADL) { PicOrderCntMsb = 0; } if (m_CurrentTemporalId == 0 && ( !(m_AccessUnitFlags & AP4_HEVC_ACCESS_UNIT_FLAG_IS_RADL) || !(m_AccessUnitFlags & AP4_HEVC_ACCESS_UNIT_FLAG_IS_RASL) || !(m_AccessUnitFlags & AP4_HEVC_ACCESS_UNIT_FLAG_IS_SUBLAYER_NON_REF))) { m_PrevTid0Pic_PicOrderCntLsb = m_CurrentSlice->slice_pic_order_cnt_lsb; m_PrevTid0Pic_PicOrderCntMsb = PicOrderCntMsb; } // POC may be negative int PicOrderCntVal = (int)(PicOrderCntMsb + m_CurrentSlice->slice_pic_order_cnt_lsb); if (m_MinPicOrderCnt > PicOrderCntVal) { m_MinPicOrderCnt = PicOrderCntVal; } if (m_CurrentSlice->slice_type == AP4_HEVC_SLICE_TYPE_B) { m_HasBFrame = true; } // emit the access unit (transfer ownership) access_unit_info.nal_units = &m_AccessUnitData[m_ActiveAccessUnitIndex]; access_unit_info.decode_order = m_TotalAccessUnitCount; if (m_AccessUnitFlags & AP4_HEVC_ACCESS_UNIT_FLAG_IS_IRAP) { access_unit_info.is_iframe = true; m_LastIframeTotalAUCount = m_TotalAccessUnitCount; } else if (m_CurrentSlice->slice_type == AP4_HEVC_SLICE_TYPE_I) { access_unit_info.is_iframe = true; m_LastIframeTotalAUCount = m_TotalAccessUnitCount; } else { access_unit_info.is_iframe = false; } if (m_HasBFrame) { access_unit_info.display_order = m_LastIframeTotalAUCount + PicOrderCntVal - m_MinPicOrderCnt; } else { access_unit_info.display_order = access_unit_info.decode_order; } m_ActiveAccessUnitIndex = (m_ActiveAccessUnitIndex + 1) % 2; m_AccessUnitData[m_ActiveAccessUnitIndex].SetDataSize(0); m_VclNalUnitsInAccessUnit = 0; m_AccessUnitFlags = 0; ++m_TotalAccessUnitCount; } /*---------------------------------------------------------------------- | AP4_HevcFrameParser::ComputeAccessUnitFlags +---------------------------------------------------------------------*/ AP4_UI32 AP4_HevcFrameParser::ComputeAccessUnitFlags(unsigned int nal_unit_type) { AP4_UI32 access_unit_flags = 0; if (nal_unit_type >= AP4_HEVC_NALU_TYPE_BLA_W_LP && nal_unit_type <= AP4_HEVC_NALU_TYPE_RSV_IRAP_VCL23) { access_unit_flags |= AP4_HEVC_ACCESS_UNIT_FLAG_IS_IRAP; } if (nal_unit_type == AP4_HEVC_NALU_TYPE_IDR_W_RADL || nal_unit_type == AP4_HEVC_NALU_TYPE_IDR_N_LP) { access_unit_flags |= AP4_HEVC_ACCESS_UNIT_FLAG_IS_IDR; } if (nal_unit_type >= AP4_HEVC_NALU_TYPE_BLA_W_LP && nal_unit_type <= AP4_HEVC_NALU_TYPE_BLA_N_LP) { access_unit_flags |= AP4_HEVC_ACCESS_UNIT_FLAG_IS_BLA; } if (nal_unit_type == AP4_HEVC_NALU_TYPE_RADL_N || nal_unit_type == AP4_HEVC_NALU_TYPE_RADL_R) { access_unit_flags |= AP4_HEVC_ACCESS_UNIT_FLAG_IS_RADL; } if (nal_unit_type == AP4_HEVC_NALU_TYPE_RASL_N || nal_unit_type == AP4_HEVC_NALU_TYPE_RASL_R) { access_unit_flags |= AP4_HEVC_ACCESS_UNIT_FLAG_IS_RASL; } if (nal_unit_type <= AP4_HEVC_NALU_TYPE_RSV_VCL_R15 && ((nal_unit_type & 1) == 0)) { access_unit_flags |= AP4_HEVC_ACCESS_UNIT_FLAG_IS_SUBLAYER_NON_REF; } return access_unit_flags; } 详细注释上述代码
09-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值