File: videothumbnailerctest.cpp

package info (click to toggle)
ffmpegthumbnailer 2.2.2%2Bgit20220218%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 864 kB
  • sloc: cpp: 11,403; ansic: 76; sh: 37; makefile: 13
file content (147 lines) | stat: -rw-r--r-- 5,282 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include "config.h"
#include "libffmpegthumbnailer/videothumbnailerc.h"

#include <algorithm>
#include <vector>
#include <fstream>
#include <string.h>
#include <catch.hpp>
#include <iostream>

using namespace std;

namespace ffmpegthumbnailer
{

TEST_CASE("C API Usage")
{
    auto* thumbnailer = video_thumbnailer_create();
    auto* imageData = video_thumbnailer_create_image_data();

    thumbnailer->seek_percentage        = 15;
    thumbnailer->overlay_film_strip     = 1;

    video_thumbnailer_set_log_callback(thumbnailer, [] (ThumbnailerLogLevel lvl, const char* msg) {
        if (lvl == ThumbnailerLogLevelError)
        {
            std::cerr << msg << "\n";
        }
    });

#ifdef HAVE_JPEG
    SECTION("CreateThumbJpeg")
    {

        thumbnailer->thumbnail_image_type   = Jpeg;
        std::string input = std::string(TEST_DATADIR) + "/test_sample.flv";
        REQUIRE(0 == video_thumbnailer_generate_thumbnail_to_buffer(thumbnailer, input.c_str(), imageData));

        CHECK(0 != imageData->image_data_size);
        CHECK(nullptr != imageData->image_data_ptr);
    }
#endif

#ifdef HAVE_PNG
    SECTION("CreateThumbPng")
    {
        thumbnailer->thumbnail_image_type = Png;

        std::string input = std::string(TEST_DATADIR) + "/test_sample.flv";
        REQUIRE(0 == video_thumbnailer_generate_thumbnail_to_buffer(thumbnailer, input.c_str(), imageData));

        CHECK(0 != imageData->image_data_size);
        CHECK(nullptr != imageData->image_data_ptr);
    }
#endif

    SECTION("CreateThumbRgb")
    {
        thumbnailer->thumbnail_image_type = Rgb;

        std::string input = std::string(TEST_DATADIR) + "/test_sample.flv";
        REQUIRE(0 == video_thumbnailer_generate_thumbnail_to_buffer(thumbnailer, input.c_str(), imageData));

        CHECK(0 != imageData->image_data_size);
        CHECK(nullptr != imageData->image_data_ptr);
        CHECK(ThumbnailerImageSourceVideoStream == imageData->image_data_source);
    }

    SECTION("CreateThumbRgbStringSizeHeightOnly")
    {
        thumbnailer->thumbnail_image_type = Rgb;
        video_thumbnailer_set_size(thumbnailer, 0, 234);

        std::string input = std::string(TEST_DATADIR) + "/test_sample.flv";
        REQUIRE(0 == video_thumbnailer_generate_thumbnail_to_buffer(thumbnailer, input.c_str(), imageData));

        CHECK(0 != imageData->image_data_size);
        CHECK(234 == imageData->image_data_height);
        CHECK(nullptr != imageData->image_data_ptr);
        CHECK(ThumbnailerImageSourceVideoStream == imageData->image_data_source);
    }

    SECTION("CreateThumbRgbOriginalSize")
    {
        thumbnailer->thumbnail_image_type = Rgb;
        video_thumbnailer_set_size(thumbnailer, 0, 0);

        std::string input = std::string(TEST_DATADIR) + "/test_sample.flv";
        auto rc = video_thumbnailer_generate_thumbnail_to_buffer(thumbnailer, input.c_str(), imageData);
        REQUIRE(0 == rc);

        CHECK(9 != imageData->image_data_size);
        CHECK(160 == imageData->image_data_width);
        CHECK(120 == imageData->image_data_height);
        CHECK(nullptr != imageData->image_data_ptr);
        CHECK(ThumbnailerImageSourceVideoStream == imageData->image_data_source);
    }

    SECTION("CreateThumbRgbSetSizeBothWidthHeightMaintainAspect")
    {
        thumbnailer->thumbnail_image_type = Rgb;
        thumbnailer->maintain_aspect_ratio = 1;
        video_thumbnailer_set_size(thumbnailer, 200, 234);

        std::string input = std::string(TEST_DATADIR) + "/test_sample.flv";
        REQUIRE(0 == video_thumbnailer_generate_thumbnail_to_buffer(thumbnailer, input.c_str(), imageData));

        CHECK(0 != imageData->image_data_size);
        CHECK(234 >= imageData->image_data_height);
        CHECK(200 == imageData->image_data_width);
        CHECK(nullptr != imageData->image_data_ptr);
        CHECK(ThumbnailerImageSourceVideoStream == imageData->image_data_source);
    }

    SECTION("CreateThumbRgbSetSizeBothWidthHeightDoNotMaintainAspect")
    {
        thumbnailer->thumbnail_image_type = Rgb;
        thumbnailer->maintain_aspect_ratio = 0;
        video_thumbnailer_set_size(thumbnailer, 200, 234);

        std::string input = std::string(TEST_DATADIR) + "/test_sample.flv";
        REQUIRE(0 == video_thumbnailer_generate_thumbnail_to_buffer(thumbnailer, input.c_str(), imageData));

        CHECK(234 * 200 * 3 == imageData->image_data_size);
        CHECK(234 == imageData->image_data_height);
        CHECK(200 == imageData->image_data_width);
        CHECK(nullptr != imageData->image_data_ptr);
        CHECK(ThumbnailerImageSourceVideoStream == imageData->image_data_source);
    }

    SECTION("CreateThumbInvalidFile")
    {
        video_thumbnailer_set_log_callback(thumbnailer, [] (ThumbnailerLogLevel, const char* msg) {
            CHECK(0 == strcmp("Could not open input file: invalidfile.mpg", msg));
        });

        CHECK(-1 == video_thumbnailer_generate_thumbnail_to_buffer(thumbnailer, "invalidfile.mpg", imageData));

        video_thumbnailer_set_log_callback(thumbnailer, nullptr);
        CHECK(-1 == video_thumbnailer_generate_thumbnail_to_buffer(thumbnailer, "invalidfile.mpg", imageData));
    }

    video_thumbnailer_destroy_image_data(imageData);
    video_thumbnailer_destroy(thumbnailer);
}

}