Implement Cast Streaming mirroring, DLNA casting, daemon+GUI, and breadd integration
Some checks failed
dev release / build (push) Failing after 12s
Some checks failed
dev release / build (push) Failing after 12s
Builds out the full v1 scope: a vendored+patched openscreen subset for low-latency Cast Streaming (Mirroring receiver 0F5096E8) alongside the existing Cast V2/HLS and new DLNA/AVTransport casting paths, breadcastd's Idle/Casting state machine with a private IPC socket, the breadcast GTK4 popup as a thin IPC client, and bread.cast.*/bread.command.cast.* breadd integration (device discovery, start/stop, mirroring lifecycle events). Also adds bakery/systemd/Forgejo CI packaging. Validated end-to-end against a real Chromecast/Google TV: negotiated Cast Streaming session, live pipeline playback, and daemon+GUI click-to-cast/ stop through the actual popup.
This commit is contained in:
parent
887c29002f
commit
8c745d18e0
283 changed files with 36788 additions and 0 deletions
122
breadcast-caststream-sys/vendor/openscreen/util/raw_ref.h
vendored
Normal file
122
breadcast-caststream-sys/vendor/openscreen/util/raw_ref.h
vendored
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
// Copyright 2026 The Chromium Authors
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef UTIL_RAW_REF_H_
|
||||
#define UTIL_RAW_REF_H_
|
||||
|
||||
#if defined(BUILD_WITH_CHROMIUM)
|
||||
|
||||
#include "partition_alloc/pointers/raw_ref.h" // nogncheck
|
||||
|
||||
namespace openscreen {
|
||||
|
||||
template <typename T>
|
||||
using raw_ref = ::base::raw_ref<T>;
|
||||
|
||||
} // namespace openscreen
|
||||
|
||||
#else // !defined(BUILD_WITH_CHROMIUM)
|
||||
|
||||
#include <type_traits>
|
||||
#include <utility>
|
||||
|
||||
#include "util/raw_ptr.h"
|
||||
|
||||
namespace openscreen {
|
||||
|
||||
template <typename T>
|
||||
class raw_ref;
|
||||
|
||||
namespace internal {
|
||||
template <typename T>
|
||||
struct is_raw_ref : std::false_type {};
|
||||
|
||||
template <typename T>
|
||||
struct is_raw_ref<raw_ref<T> > : std::true_type {};
|
||||
} // namespace internal
|
||||
|
||||
template <typename T>
|
||||
class OPENSCREEN_TRIVIAL_ABI raw_ref {
|
||||
public:
|
||||
OPENSCREEN_ALWAYS_INLINE constexpr explicit raw_ref(T& ref) noexcept
|
||||
: ptr_(&ref) {}
|
||||
|
||||
template <typename U,
|
||||
typename = std::enable_if_t<
|
||||
!internal::is_raw_ref<std::decay_t<U> >::value &&
|
||||
std::is_convertible_v<U&, T&> > >
|
||||
OPENSCREEN_ALWAYS_INLINE constexpr explicit raw_ref(U& ref) noexcept
|
||||
: ptr_(&ref) {}
|
||||
|
||||
OPENSCREEN_ALWAYS_INLINE constexpr raw_ref(const raw_ref& other) noexcept =
|
||||
default;
|
||||
OPENSCREEN_ALWAYS_INLINE constexpr raw_ref(raw_ref&& other) noexcept =
|
||||
default;
|
||||
|
||||
template <typename U,
|
||||
typename = std::enable_if_t<std::is_convertible_v<U&, T&> > >
|
||||
OPENSCREEN_ALWAYS_INLINE constexpr raw_ref(const raw_ref<U>& other) noexcept
|
||||
: ptr_(other.ptr_) {}
|
||||
|
||||
template <typename U,
|
||||
typename = std::enable_if_t<std::is_convertible_v<U&, T&> > >
|
||||
OPENSCREEN_ALWAYS_INLINE constexpr raw_ref(raw_ref<U>&& other) noexcept
|
||||
: ptr_(std::move(other.ptr_)) {}
|
||||
|
||||
~raw_ref() = default;
|
||||
|
||||
OPENSCREEN_ALWAYS_INLINE constexpr raw_ref& operator=(
|
||||
const raw_ref& other) noexcept = default;
|
||||
OPENSCREEN_ALWAYS_INLINE constexpr raw_ref& operator=(
|
||||
raw_ref&& other) noexcept = default;
|
||||
|
||||
template <typename U,
|
||||
typename = std::enable_if_t<std::is_convertible_v<U&, T&> > >
|
||||
OPENSCREEN_ALWAYS_INLINE constexpr raw_ref& operator=(
|
||||
const raw_ref<U>& other) noexcept {
|
||||
ptr_ = other.ptr_;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename U,
|
||||
typename = std::enable_if_t<std::is_convertible_v<U&, T&> > >
|
||||
OPENSCREEN_ALWAYS_INLINE constexpr raw_ref& operator=(
|
||||
raw_ref<U>&& other) noexcept {
|
||||
ptr_ = std::move(other.ptr_);
|
||||
return *this;
|
||||
}
|
||||
|
||||
OPENSCREEN_ALWAYS_INLINE constexpr T& get() const noexcept { return *ptr_; }
|
||||
OPENSCREEN_ALWAYS_INLINE constexpr T* operator->() const noexcept {
|
||||
return ptr_.get();
|
||||
}
|
||||
OPENSCREEN_ALWAYS_INLINE constexpr T& operator*() const noexcept {
|
||||
return *ptr_;
|
||||
}
|
||||
|
||||
template <typename U>
|
||||
OPENSCREEN_ALWAYS_INLINE friend constexpr bool operator==(
|
||||
const raw_ref& lhs,
|
||||
const raw_ref<U>& rhs) noexcept {
|
||||
return lhs.ptr_ == rhs.ptr_;
|
||||
}
|
||||
template <typename U>
|
||||
OPENSCREEN_ALWAYS_INLINE friend constexpr bool operator!=(
|
||||
const raw_ref& lhs,
|
||||
const raw_ref<U>& rhs) noexcept {
|
||||
return lhs.ptr_ != rhs.ptr_;
|
||||
}
|
||||
|
||||
private:
|
||||
template <typename U>
|
||||
friend class raw_ref;
|
||||
|
||||
raw_ptr<T> ptr_;
|
||||
};
|
||||
|
||||
} // namespace openscreen
|
||||
|
||||
#endif // !defined(BUILD_WITH_CHROMIUM)
|
||||
|
||||
#endif // UTIL_RAW_REF_H_
|
||||
Loading…
Add table
Add a link
Reference in a new issue