blob: 507026134b9503c854d45cb34f5c36a796055518 [file] [log] [blame]
Mike Reed7bf160e2019-05-17 16:50:51 -04001/*
2 * Copyright 2019 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 "experimental/ffmpeg/SkVideoDecoder.h"
9#include "gm/gm.h"
10#include "include/core/SkCanvas.h"
11#include "include/core/SkStream.h"
12
13class VideoDecoderGM : public skiagm::GM {
14 SkVideoDecoder fDecoder;
15
16public:
17 VideoDecoderGM() {}
18
19protected:
Leandro Lovisolo24fa2112023-08-15 19:05:17 +000020 SkString getName() const override { return SkString("videodecoder"); }
Mike Reed7bf160e2019-05-17 16:50:51 -040021
Leandro Lovisolo8f023882023-08-15 21:13:52 +000022 SkISize getISize() override { return SkISize::Make(1024, 768); }
Mike Reed7bf160e2019-05-17 16:50:51 -040023
24 void onOnceBeforeDraw() override {
25 if (!fDecoder.loadStream(SkStream::MakeFromFile("/skia/ice.mp4"))) {
26 SkDebugf("could not load movie file\n");
27 }
28 SkDebugf("duration %g\n", fDecoder.duration());
29 }
30
31 void onDraw(SkCanvas* canvas) override {
Florin Malita8b5ed022020-09-22 08:51:43 -040032 auto* rContext = canvas->recordingContext();
Brian Salomonc2a9a972020-09-15 11:24:28 -040033 if (!rContext) {
Mike Reed7bf160e2019-05-17 16:50:51 -040034 return;
35 }
36
Brian Salomonc2a9a972020-09-15 11:24:28 -040037 fDecoder.setGrContext(rContext); // context can change over time in viewer
Mike Reed7bf160e2019-05-17 16:50:51 -040038
39 double timeStamp;
40 auto img = fDecoder.nextImage(&timeStamp);
41 if (!img) {
42 (void)fDecoder.rewind();
43 img = fDecoder.nextImage(&timeStamp);
44 }
45 if (img) {
46 if (0) {
47 SkDebugf("ts %g\n", timeStamp);
48 }
Florin Malitaef47e012021-01-30 12:36:52 -050049 canvas->drawImage(img, 10, 10);
Mike Reed7bf160e2019-05-17 16:50:51 -040050 }
51 }
52
Hal Canary41248072019-07-11 16:32:53 -040053 bool onAnimate(double nanos) override {
Mike Reed7bf160e2019-05-17 16:50:51 -040054 return true;
55 }
56
57private:
John Stiles7571f9e2020-09-02 22:42:33 -040058 using INHERITED = GM;
Mike Reed7bf160e2019-05-17 16:50:51 -040059};
60DEF_GM( return new VideoDecoderGM; )
61