code: private void initDecompressor(ChannelHandlerContext ctx, int streamId, Http2Headers headers, boolean endOfStream)
              throws Http2Exception {
          final Http2Stream stream = connection.stream(streamId);
          if (stream == null) {
              return;
          }
  
          Http2Decompressor decompressor = decompressor(stream);
          if (decompressor == null && !endOfStream) {
              // Determine the content encoding.
              CharSequence contentEncoding = headers.get(CONTENT_ENCODING);
              if (contentEncoding == null) {
                  contentEncoding = IDENTITY;
              }
              final EmbeddedChannel channel = newContentDecompressor(ctx, contentEncoding);
              if (channel != null) {
                  decompressor = new Http2Decompressor(channel);
                  stream.setProperty(propertyKey, decompressor);
                  // Decode the content and remove or replace the existing headers
                  // so that the message looks like a decoded message.
                  CharSequence targetContentEncoding = getTargetContentEncoding(contentEncoding);
                  if (IDENTITY.contentEqualsIgnoreCase(targetContentEncoding)) {
                      headers.remove(CONTENT_ENCODING);
                  } else {
                      headers.set(CONTENT_ENCODING, targetContentEncoding);
                  }
              }
          }
  
          if (decompressor != null) {
              // The content length will be for the compressed data. Since we will decompress the data
              // this content-length will not be correct. Instead of queuing messages or delaying sending
              // header frames...just remove the content-length header
              headers.remove(CONTENT_LENGTH);
  
              // The first time that we initialize a decompressor, decorate the local flow controller to
              // properly convert consumed bytes.
              if (!flowControllerInitialized) {
                  flowControllerInitialized = true;
                  connection.local().flowController(new ConsumedBytesConverter(connection.local().flowController()));
              }
          }
      }
docs: Checks if a new decompressor object is needed for the stream identified by {@code streamId}.
  This method will modify the {@code content-encoding} header contained in {@code headers}.
  
  @param ctx The context
  @param streamId The identifier for the headers inside {@code headers}
  @param headers Object representing headers which have been read
  @param endOfStream Indicates if the stream has ended
  @throws Http2Exception If the {@code content-encoding} is not supported