kmsview: show multiple frames
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Wed, 9 Mar 2016 08:29:23 +0000 (10:29 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Fri, 11 Mar 2016 10:45:10 +0000 (12:45 +0200)
tests/kmsview.cpp

index cafd1606e4f0f61b7c9d2d949fe9bea8342274b6..7bd67a420c573a29b434e6cd436ea82efcaeb6d0 100644 (file)
@@ -1,5 +1,6 @@
 #include <cstdio>
 #include <fstream>
 #include <cstdio>
 #include <fstream>
+#include <unistd.h>
 
 #include "kms++.h"
 
 
 #include "kms++.h"
 
@@ -8,6 +9,17 @@
 using namespace std;
 using namespace kms;
 
 using namespace std;
 using namespace kms;
 
+static void read_frame(ifstream& is, DumbFramebuffer* fb, Crtc* crtc, Plane* plane)
+{
+       is.read((char*)fb->map(0), fb->size(0));
+
+       int r = crtc->set_plane(plane, *fb,
+                               0, 0, fb->width(), fb->height(),
+                               0, 0, fb->width(), fb->height());
+
+       ASSERT(r == 0);
+}
+
 int main(int argc, char** argv)
 {
        if (argc != 5) {
 int main(int argc, char** argv)
 {
        if (argc != 5) {
@@ -22,6 +34,14 @@ int main(int argc, char** argv)
 
        auto pixfmt = FourCCToPixelFormat(modestr);
 
 
        auto pixfmt = FourCCToPixelFormat(modestr);
 
+
+       ifstream is(filename, ifstream::binary);
+
+       is.seekg(0, std::ios::end);
+       unsigned fsize = is.tellg();
+       is.seekg(0);
+
+
        Card card;
 
        auto conn = card.get_first_connected_connector();
        Card card;
 
        auto conn = card.get_first_connected_connector();
@@ -29,10 +49,6 @@ int main(int argc, char** argv)
 
        auto fb = new DumbFramebuffer(card, w, h, pixfmt);
 
 
        auto fb = new DumbFramebuffer(card, w, h, pixfmt);
 
-       ifstream is(filename, ifstream::binary);
-       is.read((char*)fb->map(0), fb->size(0));
-       is.close();
-
        Plane* plane = 0;
 
        for (Plane* p : crtc->get_possible_planes()) {
        Plane* plane = 0;
 
        for (Plane* p : crtc->get_possible_planes()) {
@@ -48,14 +64,20 @@ int main(int argc, char** argv)
 
        FAIL_IF(!plane, "available plane not found");
 
 
        FAIL_IF(!plane, "available plane not found");
 
-       int r = crtc->set_plane(plane, *fb,
-                               0, 0, w, h,
-                               0, 0, w, h);
 
 
-       ASSERT(r == 0);
+       unsigned num_frames = fsize / fb->size(0);
+       printf("file size %u, frames %u\n", fsize, num_frames);
+
+       for (unsigned i = 0; i < num_frames; ++i) {
+               printf("frame %d\n", i);
+               read_frame(is, fb, crtc, plane);
+               usleep(1000*50);
+       }
 
        printf("press enter to exit\n");
 
 
        printf("press enter to exit\n");
 
+       is.close();
+
        getchar();
 
        delete fb;
        getchar();
 
        delete fb;