mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-15 23:01:21 +01:00

Before this CL, when we encoded a sequence with a non-existent base, we pretended that the delta was 0, and the first delta was based on that. However, in a sequence where the deltas are small, but where the first element is big, that would produce unnecessarily wide deltas. Therefore, we change the behavior in cases where the base is non-existent, to encode the first existent value (if any) as a varint; the delta width may then be smaller. This CL include two piggy-backed changes: 1. Varint encoding/decoding moved to its own file (and an additional flavor added). 2. The unit tests for delta encoding are further parameterized with a random seed. Bug: webrtc:8111 Change-Id: I76fff577c86d019c8334bf74b76bd35db06ff68d Reviewed-on: https://webrtc-review.googlesource.com/c/107860 Reviewed-by: Björn Terelius <terelius@webrtc.org> Commit-Queue: Elad Alon <eladalon@webrtc.org> Cr-Commit-Position: refs/heads/master@{#25395}
51 lines
2.2 KiB
C++
51 lines
2.2 KiB
C++
/*
|
|
* Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#ifndef LOGGING_RTC_EVENT_LOG_ENCODER_BLOB_ENCODING_H_
|
|
#define LOGGING_RTC_EVENT_LOG_ENCODER_BLOB_ENCODING_H_
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "absl/strings/string_view.h"
|
|
|
|
namespace webrtc {
|
|
|
|
// Encode/decode a sequence of strings, whose length is not known to be
|
|
// discernable from the blob itself (i.e. without being transmitted OOB),
|
|
// in a way that would allow us to separate them again on the decoding side.
|
|
// The number of blobs is assumed to be transmitted OOB. For example, if
|
|
// multiple sequences of different blobs are sent, but all sequences contain
|
|
// the same number of blobs, it is beneficial to not encode the number of blobs.
|
|
//
|
|
// EncodeBlobs() must be given a non-empty vector. The blobs themselves may
|
|
// be equal to "", though.
|
|
// EncodeBlobs() may not fail.
|
|
// EncodeBlobs() never returns the empty string.
|
|
//
|
|
// Calling DecodeBlobs() on an empty string, or with |num_of_blobs| set to 0,
|
|
// is an error.
|
|
// DecodeBlobs() returns an empty vector if it fails, e.g. due to a mismatch
|
|
// between |num_of_blobs| and |encoded_blobs|, which can happen if
|
|
// |encoded_blobs| is corrupted.
|
|
// When successful, DecodeBlobs() returns a vector of string_view objects,
|
|
// which refer to the original input (|encoded_blobs|), and therefore may
|
|
// not outlive it.
|
|
//
|
|
// Note that the returned std::string might have been reserved for significantly
|
|
// more memory than it ends up using. If the caller to EncodeBlobs() intends
|
|
// to store the result long-term, he should consider shrink_to_fit()-ing it.
|
|
std::string EncodeBlobs(const std::vector<std::string>& blobs);
|
|
std::vector<absl::string_view> DecodeBlobs(absl::string_view encoded_blobs,
|
|
size_t num_of_blobs);
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // LOGGING_RTC_EVENT_LOG_ENCODER_BLOB_ENCODING_H_
|