I agree that decoding this way will decrease the bits used in bitpacking. But, there is the issue of sending the minimum value. If we declare one minimum and send it at the beginning of the page, then every single delta in the page will be shifted by that value. For example, if the minimum delta is about -1 million, and the other deltas are usually between -10 and +10, then all of those deltas will be shifted up by 1 million, which will cause them to use too many bits. If we use zigzag encoding instead, only -1 million will require too many bits. This way, only the bit-package containing -1 million will be too big, and the others will be small enough.

When I said it will effect the compression ratio, I thought you were talking about computing another minimum for every bit-package sent. This will effect the compression ratio, but make the bit-packages smaller.

Also, my alternative is;

val = prev_val +  (v >>> 1) ^ (-(v & 1)).