blob: e6785b8f3fe8cc432494b0bedda13741f5f0e180 [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:
20
21 SkString onShortName() override {
22 return SkString("videodecoder");
23 }
24
25 SkISize onISize() override {
26 return SkISize::Make(1024, 768);
27 }
28
29 void onOnceBeforeDraw() override {
30 if (!fDecoder.loadStream(SkStream::MakeFromFile("/skia/ice.mp4"))) {
31 SkDebugf("could not load movie file\n");
32 }
33 SkDebugf("duration %g\n", fDecoder.duration());
34 }
35
36 void onDraw(SkCanvas* canvas) override {
37 GrContext* gr = canvas->getGrContext();
38 if (!gr) {
39 return;
40 }
41
42 fDecoder.setGrContext(gr); // gr can change over time in viewer
43
44 double timeStamp;
45 auto img = fDecoder.nextImage(&timeStamp);
46 if (!img) {
47 (void)fDecoder.rewind();
48 img = fDecoder.nextImage(&timeStamp);
49 }
50 if (img) {
51 if (0) {
52 SkDebugf("ts %g\n", timeStamp);
53 }
54 canvas->drawImage(img, 10, 10, nullptr);
55 }
56 }
57
Hal Canary41248072019-07-11 16:32:53 -040058 bool onAnimate(double nanos) override {
Mike Reed7bf160e2019-05-17 16:50:51 -040059 return true;
60 }
61
62private:
63 typedef GM INHERITED;
64};
65DEF_GM( return new VideoDecoderGM; )
66