@@ -963,17 +963,22 @@ uint8_t* pipeline_forward(struct thread_context* thread_context, const int32_t b
963963
964964 /* Prefilter function */
965965 if (context -> prefilter != NULL ) {
966- /* Set unwritten values to zero */
967- if (!output_is_disposable ) {
968- memset (_dest , 0 , bsize );
969- }
970966 // Create new prefilter parameters for this block (must be private for each thread)
971967 blosc2_prefilter_params preparams ;
972968 memcpy (& preparams , context -> preparams , sizeof (preparams ));
969+ // Calculate output_size based on number of elements and output typesize
970+ int32_t nelems = bsize / typesize ; // number of elements in the input block
971+ // If output_typesize is not set (0), default to input typesize (no type conversion)
972+ int32_t output_typesize_actual = (preparams .output_typesize > 0 ) ? preparams .output_typesize : typesize ;
973+ int32_t output_size = nelems * output_typesize_actual ; // output size in bytes
974+ preparams .output_typesize = output_typesize_actual ; // ensure it's set
975+ /* Set unwritten values to zero */
976+ if (!output_is_disposable ) {
977+ memset (_dest , 0 , output_size );
978+ }
973979 preparams .input = _src ;
974980 preparams .output = _dest ;
975- preparams .output_size = bsize ;
976- preparams .output_typesize = typesize ;
981+ preparams .output_size = output_size ;
977982 preparams .output_offset = offset ;
978983 preparams .nblock = offset / context -> blocksize ;
979984 preparams .nchunk = context -> schunk != NULL ? context -> schunk -> current_nchunk : -1 ;
0 commit comments