KinesisManagerStatus StreamDefinitionProvider::GetCodecPrivateData()

in kinesis_manager/src/stream_definition_provider.cpp [32:59]


KinesisManagerStatus StreamDefinitionProvider::GetCodecPrivateData(
  const ParameterPath & prefix, const ParameterReaderInterface & reader,
  PBYTE * out_codec_private_data, uint32_t * out_codec_private_data_size) const
{
  if (nullptr == out_codec_private_data ||
      nullptr == out_codec_private_data_size) {
    return KINESIS_MANAGER_STATUS_INVALID_INPUT;
  }
  std::string b64_encoded_codec_private_data;
  reader.ReadParam(prefix + "codecPrivateData", b64_encoded_codec_private_data);
  if (!b64_encoded_codec_private_data.empty()) {
    uint8_t temp_codec_data[STREAM_DEFINITION_MAX_CODEC_PRIVATE_DATA_SIZE] = {0};
    uint32_t decoded_buffer_size = sizeof(temp_codec_data);
    if (STATUS_SUCCESS != base64Decode(const_cast<char *>(b64_encoded_codec_private_data.c_str()),
                                       temp_codec_data, &decoded_buffer_size)) {
      return KINESIS_MANAGER_STATUS_BASE64DECODE_FAILED;
    }
    PBYTE codec_private_data = (PBYTE)malloc(decoded_buffer_size);
    if (nullptr == codec_private_data) {
      return KINESIS_MANAGER_STATUS_MALLOC_FAILED;
    }
    memset(codec_private_data, 0, decoded_buffer_size);
    memcpy(codec_private_data, temp_codec_data, decoded_buffer_size);
    *out_codec_private_data = codec_private_data;
    *out_codec_private_data_size = decoded_buffer_size;
  }
  return KINESIS_MANAGER_STATUS_SUCCESS;
}