blob: c0dbc88f3cbfea0a0534c7a5c8a1478c859e56e0 [file]
// 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 "chrome/services/media_gallery_util/media_parser_factory.h"
#include "build/build_config.h"
#include "chrome/services/media_gallery_util/media_parser.h"
#include "media/base/media.h"
#include "media/media_buildflags.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
#if BUILDFLAG(IS_ANDROID)
#include "chrome/services/media_gallery_util/media_parser_android.h"
#endif
MediaParserFactory::MediaParserFactory(
mojo::PendingReceiver<chrome::mojom::MediaParserFactory> receiver)
: receiver_(this, std::move(receiver)) {}
MediaParserFactory::~MediaParserFactory() = default;
void MediaParserFactory::CreateMediaParser(int64_t libyuv_cpu_flags,
int64_t libavutil_cpu_flags,
CreateMediaParserCallback callback) {
media::InitializeMediaLibraryInSandbox(libyuv_cpu_flags, libavutil_cpu_flags);
mojo::PendingRemote<chrome::mojom::MediaParser> remote_media_parser;
std::unique_ptr<MediaParser> media_parser;
#if BUILDFLAG(IS_ANDROID)
media_parser = std::make_unique<MediaParserAndroid>();
#else
media_parser = std::make_unique<MediaParser>();
#endif
mojo::MakeSelfOwnedReceiver(
std::move(media_parser),
remote_media_parser.InitWithNewPipeAndPassReceiver());
std::move(callback).Run(std::move(remote_media_parser));
}