MVP_Plus

版权声明:本文为延成原创文章,转载请标明出处

MVP_Plus

MVP_Plus示例用于解释如何在我们的Android应用程序中使用mvp模式。项目代码整体干净,此项目可以用来学习优化自己的MVP架构。mvp kotlin版的地址MVP_Plus_kt

用到的第三方库

声明

应用中展示的所有内容均搜集自互联网,若内容有侵权请联系作者进行删除处理。本应用仅用作分享与学习。

/*---------------------------------------------------------------------- | AP4_HevcSequenceParameterSet::AP4_HevcSequenceParameterSet +---------------------------------------------------------------------*/ AP4_HevcSequenceParameterSet::AP4_HevcSequenceParameterSet() : sps_video_parameter_set_id(0), sps_max_sub_layers_minus1(0), sps_temporal_id_nesting_flag(0), sps_seq_parameter_set_id(0), chroma_format_idc(0), separate_colour_plane_flag(0), pic_width_in_luma_samples(0), pic_height_in_luma_samples(0), conformance_window_flag(0), conf_win_left_offset(0), conf_win_right_offset(0), conf_win_top_offset(0), conf_win_bottom_offset(0), bit_depth_luma_minus8(0), bit_depth_chroma_minus8(0), log2_max_pic_order_cnt_lsb_minus4(0), sps_sub_layer_ordering_info_present_flag(0), log2_min_luma_coding_block_size_minus3(0), log2_diff_max_min_luma_coding_block_size(0), log2_min_transform_block_size_minus2(0), log2_diff_max_min_transform_block_size(0), max_transform_hierarchy_depth_inter(0), max_transform_hierarchy_depth_intra(0), scaling_list_enabled_flag(0), sps_scaling_list_data_present_flag(0), amp_enabled_flag(0), sample_adaptive_offset_enabled_flag(0), pcm_enabled_flag(0), pcm_sample_bit_depth_luma_minus1(0), pcm_sample_bit_depth_chroma_minus1(0), log2_min_pcm_luma_coding_block_size_minus3(0), log2_diff_max_min_pcm_luma_coding_block_size(0), pcm_loop_filter_disabled_flag(0), num_short_term_ref_pic_sets(0), long_term_ref_pics_present_flag(0), num_long_term_ref_pics_sps(0), sps_temporal_mvp_enabled_flag(0), strong_intra_smoothing_enabled_flag(0), vui_parameters_present_flag(0) { AP4_SetMemory(&profile_tier_level, 0, sizeof(profile_tier_level)); for (unsigned int i=0; i<8; i++) { sps_max_dec_pic_buffering_minus1[i] = 0; sps_max_num_reorder_pics[i] = 0; sps_max_latency_increase_plus1[i] = 0; } AP4_SetMemory(short_term_ref_pic_sets, 0, sizeof(short_term_ref_pic_sets)); } /*---------------------------------------------------------------------- | AP4_HevcSequenceParameterSet::Parse +---------------------------------------------------------------------*/ AP4_Result AP4_HevcSequenceParameterSet::Parse(const unsigned char* data, unsigned int data_size) { raw_bytes.SetData(data, data_size); AP4_DataBuffer unescaped(data, data_size); AP4_NalParser::Unescape(unescaped); AP4_BitReader bits(unescaped.GetData(), unescaped.GetDataSize()); bits.SkipBits(16); // NAL Unit Header sps_video_parameter_set_id = bits.ReadBits(4); if (sps_video_parameter_set_id > AP4_HEVC_VPS_MAX_ID) { DBG_PRINTF_2("sps_video_parameter_set_id[%d] > AP4_HEVC_VPS_MAX_ID[%d]\n", sps_video_parameter_set_id, AP4_HEVC_VPS_MAX_ID); return AP4_ERROR_INVALID_FORMAT; } sps_max_sub_layers_minus1 = bits.ReadBits(3); sps_temporal_id_nesting_flag = bits.ReadBit(); AP4_Result result = profile_tier_level.Parse(bits, sps_max_sub_layers_minus1); if (AP4_FAILED(result)) { return result; } sps_seq_parameter_set_id = ReadGolomb(bits); if (sps_seq_parameter_set_id > AP4_HEVC_SPS_MAX_ID) { DBG_PRINTF_2("sps_seq_parameter_set_id[%d] > AP4_HEVC_SPS_MAX_ID[%d]\n", sps_seq_parameter_set_id, AP4_HEVC_SPS_MAX_ID); return AP4_ERROR_INVALID_FORMAT; } chroma_format_idc = ReadGolomb(bits); if (chroma_format_idc == 3) { separate_colour_plane_flag = bits.ReadBit(); } pic_width_in_luma_samples = ReadGolomb(bits); pic_height_in_luma_samples = ReadGolomb(bits); conformance_window_flag = bits.ReadBit(); if (conformance_window_flag) { conf_win_left_offset = ReadGolomb(bits); conf_win_right_offset = ReadGolomb(bits); conf_win_top_offset = ReadGolomb(bits); conf_win_bottom_offset = ReadGolomb(bits); } bit_depth_luma_minus8 = ReadGolomb(bits); bit_depth_chroma_minus8 = ReadGolomb(bits); log2_max_pic_order_cnt_lsb_minus4 = ReadGolomb(bits); if (log2_max_pic_order_cnt_lsb_minus4 > 16) { DBG_PRINTF_1("log2_max_pic_order_cnt_lsb_minus4[%d] > 16\n", log2_max_pic_order_cnt_lsb_minus4); return AP4_ERROR_INVALID_FORMAT; } sps_sub_layer_ordering_info_present_flag = bits.ReadBit(); for (unsigned int i = (sps_sub_layer_ordering_info_present_flag ? 0 : sps_max_sub_layers_minus1); i <= sps_max_sub_layers_minus1; i++) { sps_max_dec_pic_buffering_minus1[i] = ReadGolomb(bits); sps_max_num_reorder_pics[i] = ReadGolomb(bits); sps_max_latency_increase_plus1[i] = ReadGolomb(bits); } log2_min_luma_coding_block_size_minus3 = ReadGolomb(bits); log2_diff_max_min_luma_coding_block_size = ReadGolomb(bits); log2_min_transform_block_size_minus2 = ReadGolomb(bits); log2_diff_max_min_transform_block_size = ReadGolomb(bits); max_transform_hierarchy_depth_inter = ReadGolomb(bits); max_transform_hierarchy_depth_intra = ReadGolomb(bits); scaling_list_enabled_flag = bits.ReadBit(); if (scaling_list_enabled_flag) { sps_scaling_list_data_present_flag = bits.ReadBit(); if (sps_scaling_list_data_present_flag) { scaling_list_data(bits); } } amp_enabled_flag = bits.ReadBit(); sample_adaptive_offset_enabled_flag = bits.ReadBit(); pcm_enabled_flag = bits.ReadBit(); if (pcm_enabled_flag) { pcm_sample_bit_depth_luma_minus1 = bits.ReadBits(4); pcm_sample_bit_depth_chroma_minus1 = bits.ReadBits(4); log2_min_pcm_luma_coding_block_size_minus3 = ReadGolomb(bits); log2_diff_max_min_pcm_luma_coding_block_size = ReadGolomb(bits); pcm_loop_filter_disabled_flag = bits.ReadBit(); } num_short_term_ref_pic_sets = ReadGolomb(bits); if (num_short_term_ref_pic_sets > AP4_HEVC_SPS_MAX_RPS) { DBG_PRINTF_2("num_short_term_ref_pic_sets[%d] > AP4_HEVC_SPS_MAX_RPS[%d]\n", num_short_term_ref_pic_sets, AP4_HEVC_SPS_MAX_RPS); return AP4_ERROR_INVALID_FORMAT; } for (unsigned int i=0; i<num_short_term_ref_pic_sets; i++) { AP4_Result result = parse_st_ref_pic_set(&short_term_ref_pic_sets[i], this, i, num_short_term_ref_pic_sets, bits); if (AP4_FAILED(result)) return result; } long_term_ref_pics_present_flag = bits.ReadBit(); if (long_term_ref_pics_present_flag) { num_long_term_ref_pics_sps = ReadGolomb(bits); for (unsigned int i=0; i<num_long_term_ref_pics_sps; i++) { /* lt_ref_pic_poc_lsb_sps[i] = */ bits.ReadBits(log2_max_pic_order_cnt_lsb_minus4 + 4); /* used_by_curr_pic_lt_sps_flag[i] = */ bits.ReadBit(); } } sps_temporal_mvp_enabled_flag = bits.ReadBit(); strong_intra_smoothing_enabled_flag = bits.ReadBit(); vui_parameters_present_flag = bits.ReadBit(); if (vui_parameters_present_flag) { AP4_Result result = vui_parameters.Parse(bits); if (AP4_FAILED(result)) return result; } return AP4_SUCCESS; } 详细注释上述代码
09-25
/*---------------------------------------------------------------------- | AP4_HevcSequenceParameterSet +---------------------------------------------------------------------*/ struct AP4_HevcSequenceParameterSet { AP4_HevcSequenceParameterSet(); // methods AP4_Result Parse(const unsigned char* data, unsigned int data_size); void GetInfo(unsigned int& width, unsigned int& height, float& fps); AP4_DataBuffer raw_bytes; unsigned int sps_video_parameter_set_id; unsigned int sps_max_sub_layers_minus1; unsigned int sps_temporal_id_nesting_flag; AP4_HevcProfileTierLevel profile_tier_level; unsigned int sps_seq_parameter_set_id; unsigned int chroma_format_idc; unsigned int separate_colour_plane_flag; unsigned int pic_width_in_luma_samples; unsigned int pic_height_in_luma_samples; unsigned int conformance_window_flag; unsigned int conf_win_left_offset; unsigned int conf_win_right_offset; unsigned int conf_win_top_offset; unsigned int conf_win_bottom_offset; unsigned int bit_depth_luma_minus8; unsigned int bit_depth_chroma_minus8; unsigned int sps_max_dec_pic_buffering_minus1[8]; unsigned int sps_max_num_reorder_pics[8]; unsigned int sps_max_latency_increase_plus1[8]; unsigned int log2_max_pic_order_cnt_lsb_minus4; unsigned int sps_sub_layer_ordering_info_present_flag; unsigned int log2_min_luma_coding_block_size_minus3; unsigned int log2_diff_max_min_luma_coding_block_size; unsigned int log2_min_transform_block_size_minus2; unsigned int log2_diff_max_min_transform_block_size; unsigned int max_transform_hierarchy_depth_inter; unsigned int max_transform_hierarchy_depth_intra; unsigned int scaling_list_enabled_flag; unsigned int sps_scaling_list_data_present_flag; // skipped scaling list data unsigned int amp_enabled_flag; unsigned int sample_adaptive_offset_enabled_flag; unsigned int pcm_enabled_flag; unsigned int pcm_sample_bit_depth_luma_minus1; unsigned int pcm_sample_bit_depth_chroma_minus1; unsigned int log2_min_pcm_luma_coding_block_size_minus3; unsigned int log2_diff_max_min_pcm_luma_coding_block_size; unsigned int pcm_loop_filter_disabled_flag; unsigned int num_short_term_ref_pic_sets; unsigned int long_term_ref_pics_present_flag; unsigned int num_long_term_ref_pics_sps; unsigned int sps_temporal_mvp_enabled_flag; unsigned int strong_intra_smoothing_enabled_flag; unsigned int vui_parameters_present_flag; AP4_HevcVuiParameterSet vui_parameters; AP4_HevcShortTermRefPicSet short_term_ref_pic_sets[AP4_HEVC_SPS_MAX_RPS]; }; /*---------------------------------------------------------------------- | AP4_HevcVideoParameterSet +---------------------------------------------------------------------*/ struct AP4_HevcVideoParameterSet { AP4_HevcVideoParameterSet(); // methods AP4_Result Parse(const unsigned char* data, unsigned int data_size); void GetInfo(float& fps); AP4_DataBuffer raw_bytes; unsigned int vps_video_parameter_set_id; unsigned int vps_max_layers_minus1; unsigned int vps_max_sub_layers_minus1; unsigned int vps_temporal_id_nesting_flag; AP4_HevcProfileTierLevel profile_tier_level; unsigned int vps_sub_layer_ordering_info_present_flag; unsigned int vps_max_dec_pic_buffering_minus1[8]; unsigned int vps_max_num_reorder_pics[8]; unsigned int vps_max_latency_increase_plus1[8]; unsigned int vps_max_layer_id; unsigned int vps_num_layer_sets_minus1; unsigned int vps_timing_info_present_flag; unsigned int vps_num_units_in_tick; unsigned int vps_time_scale; unsigned int vps_poc_proportional_to_timing_flag; unsigned int vps_num_ticks_poc_diff_one_minus1; }; /*---------------------------------------------------------------------- | AP4_HevcSliceSegmentHeader +---------------------------------------------------------------------*/ struct AP4_HevcSliceSegmentHeader { AP4_HevcSliceSegmentHeader() {} // leave members uninitialized on purpose AP4_Result Parse(const AP4_UI08* data, unsigned int data_size, unsigned int nal_unit_type, AP4_HevcPictureParameterSet** picture_parameter_sets, AP4_HevcSequenceParameterSet** sequence_parameter_sets); unsigned char partial_raw_data[256]; // saved partial raw data; unsigned int size; // size of the parsed data unsigned int first_slice_segment_in_pic_flag; unsigned int no_output_of_prior_pics_flag; unsigned int slice_pic_parameter_set_id; unsigned int dependent_slice_segment_flag; unsigned int slice_segment_address; unsigned int slice_type; unsigned int pic_output_flag; unsigned int colour_plane_id; unsigned int slice_pic_order_cnt_lsb; unsigned int short_term_ref_pic_set_sps_flag; unsigned int short_term_ref_pic_set_idx; unsigned int num_entry_point_offsets; unsigned int offset_len_minus1; unsigned int num_long_term_sps; unsigned int num_long_term_pics; AP4_HevcShortTermRefPicSet short_term_ref_pic_set; unsigned int used_by_curr_pic_lt_flag[AP4_HEVC_MAX_LT_REFS]; }; 注释上述代码
09-25
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值