@@ -54,8 +54,13 @@ extern "C" qpl_status hw_submit_decompress_job(qpl_job *qpl_job_ptr,
5454 auto *const state_ptr = reinterpret_cast <qpl_hw_state *>(job::get_state (qpl_job_ptr));
5555
5656 hw_iaa_analytics_descriptor *const desc_ptr = &state_ptr->desc_ptr ;
57- hw_iaa_aecs_analytic * const aecs_ptr = GET_DCFG (state_ptr);
57+ hw_iaa_aecs_analytic * aecs_ptr = GET_DCFG (state_ptr);
5858
59+ if (IS_RND_ACCESS_HDR (qpl_job_ptr->flags )) {
60+ aecs_ptr = (hw_iaa_aecs_analytic *) ((uint8_t *) (state_ptr->dcfg ) + HW_AECS_FILTER_AND_DECOMPRESS_WA_HB );
61+ }
62+
63+ HW_IMMEDIATELY_RET_NULLPTR (aecs_ptr);
5964 last_job = (available_in > MAX_BUF_SIZE ) ? 0u : last_job;
6065
6166 // Descriptor buffers set
@@ -79,7 +84,6 @@ extern "C" qpl_status hw_submit_decompress_job(qpl_job *qpl_job_ptr,
7984 const bool is_dictionary_mode = (qpl_job_ptr->flags & QPL_FLAG_FIRST ||
8085 !state_ptr->execution_history .first_job_has_been_submitted ) &&
8186 qpl_job_ptr->dictionary != NULL ;
82-
8387 bool is_aecs_format2_expected = qpl::ml::util::are_iaa_gen_2_min_capabilities_present ();
8488
8589 if (state_ptr->execution_history .first_job_has_been_submitted ) {
@@ -92,13 +96,6 @@ extern "C" qpl_status hw_submit_decompress_job(qpl_job *qpl_job_ptr,
9296 operation_flags |= ADOF_READ_SRC2 (AD_RDSRC2_AECS );
9397 }
9498
95- // Decompress random header
96- if (qpl_job_ptr->ignore_start_bits != 0u ) {
97- operation_flags |= ADOF_READ_SRC2 (AD_RDSRC2_AECS );
98- core_sw::util::set_zeros ((uint8_t *) aecs_ptr, sizeof (hw_iaa_aecs_analytic));
99- aecs_ptr->inflate_options .decompress_state = DEF_STATE_HDR ;
100- }
101-
10299 // Decompress huffman only
103100 if (qpl_job_ptr->flags & QPL_FLAG_NO_HDRS ) {
104101 operation_flags |= ADOF_READ_SRC2 (AD_RDSRC2_AECS );
@@ -131,13 +128,14 @@ extern "C" qpl_status hw_submit_decompress_job(qpl_job *qpl_job_ptr,
131128
132129 }
133130
134- // Set the input accum alignment if we're doing random access
135- if ((qpl_job_ptr->flags & QPL_FLAG_RND_ACCESS )
136- && (hw_iaa_aecs_decompress_is_empty_input_accumulator (&aecs_ptr->inflate_options ))) {
137- aecs_ptr->inflate_options .idx_bit_offset = 7u & qpl_job_ptr->ignore_start_bits ;
138- }
139131
140132 if (0u != qpl_job_ptr->ignore_start_bits ) {
133+ if (IS_RND_ACCESS_HDR (qpl_job_ptr->flags )) {
134+ operation_flags |= ADOF_READ_SRC2 (AD_RDSRC2_AECS );
135+ core_sw::util::set_zeros (reinterpret_cast <uint8_t *>(aecs_ptr), HW_AECS_FILTER_AND_DECOMPRESS_WA_HB );
136+ aecs_ptr->inflate_options .idx_bit_offset = 7u & qpl_job_ptr->ignore_start_bits ;
137+ aecs_ptr->inflate_options .decompress_state = DEF_STATE_HDR ;
138+ }
141139 auto status = hw_iaa_aecs_decompress_set_input_accumulator (&aecs_ptr->inflate_options ,
142140 desc_ptr->src1_ptr ,
143141 qpl_job_ptr->available_in ,
@@ -149,10 +147,12 @@ extern "C" qpl_status hw_submit_decompress_job(qpl_job *qpl_job_ptr,
149147 desc_ptr->src1_ptr = ++qpl_job_ptr->next_in_ptr ;
150148 desc_ptr->src1_size = --qpl_job_ptr->available_in ;
151149 }
152-
153150 hw_iaa_aecs_decompress_state_set_aecs_format (&aecs_ptr->inflate_options , is_aecs_format2_expected);
154151
155152 // AECS Write policy
153+ if (IS_RND_ACCESS_HDR (qpl_job_ptr->flags )) {
154+ operation_flags |= ADOF_AECS_SEL ;
155+ }
156156 if (IS_RND_ACCESS_BODY (qpl_job_ptr->flags )) {
157157 decompression_flags |= ADDF_FLUSH_OUTPUT ;
158158 hw_iaa_aecs_decompress_set_crc_seed (aecs_ptr, qpl_job_ptr->crc );
0 commit comments