blob: 26070c3657ab793d60cb44a44a105317287b06d1 [file] [log] [blame]
// Copyright 2018 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/gpu/v4l2/v4l2_decode_surface.h"
#include <linux/videodev2.h>
#include "base/logging.h"
#include "base/strings/stringprintf.h"
#include "media/gpu/macros.h"
namespace media {
V4L2DecodeSurface::V4L2DecodeSurface(int input_record,
int output_record,
ReleaseCB release_cb)
: input_record_(input_record),
release_cb_(std::move(release_cb)) {}
V4L2DecodeSurface::~V4L2DecodeSurface() {
DVLOGF(5) << "Releasing output record id=" << output_record_;
if (release_cb_)
void V4L2DecodeSurface::SetDecoded() {
decoded_ = true;
// We can now drop references to all reference surfaces for this surface
// as we are done with decoding.
// And finally execute and drop the decode done callback, if set.
if (done_cb_)
void V4L2DecodeSurface::SetVisibleRect(const gfx::Rect& visible_rect) {
visible_rect_ = visible_rect;
void V4L2DecodeSurface::SetReferenceSurfaces(
std::vector<scoped_refptr<V4L2DecodeSurface>> ref_surfaces) {
reference_surfaces_ = std::move(ref_surfaces);
void V4L2DecodeSurface::SetDecodeDoneCallback(base::OnceClosure done_cb) {
done_cb_ = std::move(done_cb);
std::string V4L2DecodeSurface::ToString() const {
std::string out;
base::StringAppendF(&out, "Buffer %d -> %d. ", input_record_, output_record_);
base::StringAppendF(&out, "Reference surfaces:");
for (const auto& ref : reference_surfaces_) {
DCHECK_NE(ref->output_record(), output_record_);
base::StringAppendF(&out, " %d", ref->output_record());
return out;
void V4L2ConfigStoreDecodeSurface::PrepareSetCtrls(
struct v4l2_ext_controls* ctrls) const {
DCHECK_NE(ctrls, nullptr);
DCHECK_GT(config_store_, 0u);
ctrls->config_store = config_store_;
void V4L2ConfigStoreDecodeSurface::PrepareQueueBuffer(
struct v4l2_buffer* buffer) const {
DCHECK_NE(buffer, nullptr);
DCHECK_GT(config_store_, 0u);
buffer->config_store = config_store_;
uint64_t V4L2ConfigStoreDecodeSurface::GetReferenceID() const {
// Control store uses the output buffer ID as reference.
return output_record();
bool V4L2ConfigStoreDecodeSurface::Submit() const {
// There is nothing extra to submit when using the config store
return true;
} // namespace media