blob: d8f39d351db5735ec3e7b28b77754d686924c2cf [file] [log] [blame]
Florin Malitaa8316552018-11-09 16:19:44 -05001/*
2 * Copyright 2018 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "SkottieUtils.h"
9
10#include "SkAnimCodecPlayer.h"
11#include "SkData.h"
12#include "SkCodec.h"
13#include "SkImage.h"
14#include "SkMakeUnique.h"
15#include "SkOSFile.h"
16#include "SkOSPath.h"
17
18namespace skottie_utils {
19
20sk_sp<MultiFrameImageAsset> MultiFrameImageAsset::Make(sk_sp<SkData> data) {
21 if (auto codec = SkCodec::MakeFromData(std::move(data))) {
22 return sk_sp<MultiFrameImageAsset>(
23 new MultiFrameImageAsset(skstd::make_unique<SkAnimCodecPlayer>(std::move(codec))));
24 }
25
26 return nullptr;
27}
28
29MultiFrameImageAsset::MultiFrameImageAsset(std::unique_ptr<SkAnimCodecPlayer> player)
30 : fPlayer(std::move(player)) {
31 SkASSERT(fPlayer);
32}
33
34bool MultiFrameImageAsset::isMultiFrame() {
35 return fPlayer->duration() > 0;
36}
37
38sk_sp<SkImage> MultiFrameImageAsset::getFrame(float t) {
39 fPlayer->seek(static_cast<uint32_t>(t * 1000));
40 return fPlayer->getFrame();
41}
42
43sk_sp<FileResourceProvider> FileResourceProvider::Make(SkString base_dir) {
44 return sk_isdir(base_dir.c_str())
45 ? sk_sp<FileResourceProvider>(new FileResourceProvider(std::move(base_dir)))
46 : nullptr;
47}
48
49FileResourceProvider::FileResourceProvider(SkString base_dir) : fDir(std::move(base_dir)) {}
50
51sk_sp<SkData> FileResourceProvider::load(const char resource_path[],
52 const char resource_name[]) const {
53 const auto full_dir = SkOSPath::Join(fDir.c_str() , resource_path),
54 full_path = SkOSPath::Join(full_dir.c_str(), resource_name);
55 return SkData::MakeFromFileName(full_path.c_str());
56}
57
58sk_sp<skottie::ImageAsset> FileResourceProvider::loadImageAsset(const char resource_path[],
59 const char resource_name[]) const {
60 return MultiFrameImageAsset::Make(this->load(resource_path, resource_name));
61}
62
63} // namespace skottie_utils