blob: e6509a930ecd7038e24d99567b203979a6545942 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "media/capture/video/mac/pixel_buffer_transferer_mac.h"
#include "base/check.h"
#include "base/logging.h"
namespace media {
PixelBufferTransferer::PixelBufferTransferer() {
OSStatus error =
VTPixelTransferSessionCreate(nil, transfer_session_.InitializeInto());
// There is no known way to make session creation fail, so we do not deal with
// failures gracefully.
CHECK(error == noErr) << "Creating a VTPixelTransferSession failed: "
<< error;
}
bool PixelBufferTransferer::TransferImage(CVPixelBufferRef source,
CVPixelBufferRef destination) {
DCHECK(source);
DCHECK(destination);
OSStatus error = VTPixelTransferSessionTransferImage(transfer_session_,
source, destination);
if (error == kVTPixelTransferNotSupportedErr) {
// This source/destination transfer operation is not supported.
return false;
}
CHECK(error == noErr)
<< "Unexpected VTPixelTransferSessionTransferImage error: " << error;
return true;
}
PixelBufferTransferer::~PixelBufferTransferer() {
VTPixelTransferSessionInvalidate(transfer_session_);
}
} // namespace media