// Copyright 2020 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_WEBCODECS_VIDEO_FRAME_HANDLE_H_ #define THIRD_PARTY_BLINK_RENDERER_MODULES_WEBCODECS_VIDEO_FRAME_HANDLE_H_ #include "base/memory/scoped_refptr.h" #include "base/synchronization/lock.h" #include "base/thread_annotations.h" #include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/modules/webcodecs/webcodecs_logger.h" #include "third_party/blink/renderer/platform/wtf/functional.h" #include "third_party/blink/renderer/platform/wtf/thread_safe_ref_counted.h" #include "third_party/skia/include/core/SkRefCnt.h" // Note: Don't include "media/base/video_frame.h" here without good reason, // since it includes a lot of non-blink types which can pollute the namespace. class SkImage; namespace media { class VideoFrame; } namespace blink { class ExecutionContext; // Wrapper class that allows sharing a single |frame_| reference across // multiple VideoFrames, which can be invalidated for all frames at once. // // If Invalidate() is not called before the handle's destructor runs, this means // that none of the VideoFrames sharing this handle were closed, and they were // all GC'ed instead. This can lead to stalls, since frames are not released // fast enough through the GC to keep a pipeline running smoothly. In that case // report an unclosed frame through |close_auditor_|. class MODULES_EXPORT VideoFrameHandle : public WTF::ThreadSafeRefCounted<VideoFrameHandle> { … }; } // namespace blink #endif // THIRD_PARTY_BLINK_RENDERER_MODULES_WEBCODECS_VIDEO_FRAME_HANDLE_H_