// Copyright 2016 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 "services/media/framework_ffmpeg/ffmpeg_audio_decoder.h"
#include "services/media/framework_ffmpeg/ffmpeg_decoder.h"
#include "services/media/framework_ffmpeg/ffmpeg_type_converters.h"
#include "services/media/framework_ffmpeg/ffmpeg_video_decoder.h"

namespace mojo {
namespace media {

Result FfmpegDecoder::Create(
    const StreamType& stream_type,
    std::shared_ptr<Decoder>* decoder_out) {
  DCHECK(decoder_out);

  AvCodecContextPtr av_codec_context(AVCodecContextFromStreamType(stream_type));
  if (!av_codec_context) {
    return Result::kUnsupportedOperation;
  }

  AVCodec* ffmpeg_decoder = avcodec_find_decoder(av_codec_context->codec_id);
  if (ffmpeg_decoder == nullptr) {
    return Result::kUnsupportedOperation;
  }

  int r = avcodec_open2(av_codec_context.get(), ffmpeg_decoder, nullptr);
  if (r < 0) {
    return Result::kUnknownError;
  }

  switch (av_codec_context->codec_type) {
    case AVMEDIA_TYPE_AUDIO:
      *decoder_out = std::shared_ptr<Decoder>(
          new FfmpegAudioDecoder(std::move(av_codec_context)));
      break;
    case AVMEDIA_TYPE_VIDEO:
      *decoder_out = std::shared_ptr<Decoder>(
          new FfmpegVideoDecoder(std::move(av_codec_context)));
      break;
    default:
      return Result::kUnsupportedOperation;
  }

  return Result::kOk;
}

} // namespace media
} // namespace mojo
