// Copyright 2020 The Fuchsia 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 "video_decoder.h"

namespace {

std::atomic<uint32_t> next_decoder_id_;

}  // namespace

VideoDecoder::VideoDecoder(
    media_metrics::StreamProcessorEvents2MetricDimensionImplementation implementation, Owner* owner,
    Client* client, bool is_secure)
    : decoder_id_(next_decoder_id_++),
      owner_(owner),
      client_(client),
      is_secure_(is_secure),
      implementation_(implementation) {
  pts_manager_ = std::make_unique<PtsManager>();
  LogEvent(media_metrics::StreamProcessorEvents2MetricDimensionEvent_CoreCreated);
}

VideoDecoder::~VideoDecoder() {
  LogEvent(media_metrics::StreamProcessorEvents2MetricDimensionEvent_CoreDeleted);
}

void VideoDecoder::LogEvent(media_metrics::StreamProcessorEvents2MetricDimensionEvent event) {
  metrics().LogEvent(implementation_, event);
}
