Add drawing grid
authorPeng Li <seudut@gmail.com>
Thu, 31 May 2018 16:07:15 +0000 (00:07 +0800)
committerPeng Li <seudut@gmail.com>
Thu, 31 May 2018 16:07:15 +0000 (00:07 +0800)
yuvPlayer.cpp

index 87fb7dc..fe7f45e 100644 (file)
@@ -26,7 +26,7 @@ class YuvPlayer
 public:
     YuvPlayer(int width, int height, const string& title = "YUV Player");
     void play(string fname, int fps = -1);
-    void drawGrid();
+    void toggleGrid();
     ~YuvPlayer();
 
 private:
@@ -41,6 +41,8 @@ private:
     unsigned int frameCnt = 0;
     string title;
     ifstream::pos_type last_pos;
+    bool isShowingGrid = false;
+    uint8_t *raw;
 };
 
 
@@ -80,7 +82,7 @@ YuvPlayer::~YuvPlayer()
 void YuvPlayer::play(string file, int fps)
 {
     size_t frame_size = width * height * 3 / 2;
-    uint8_t *raw = (uint8_t *) malloc(sizeof(uint8_t) * frame_size);
+    raw = (uint8_t *) malloc(sizeof(uint8_t) * frame_size);
     ifstream in (file, ios::binary);
     if (!in.is_open()) {
         cout << "failed to open " << file << endl;
@@ -126,7 +128,7 @@ void YuvPlayer::play(string file, int fps)
                         isPlaying = !isPlaying;
                         break;
                     case SDLK_g:
-                        drawGrid();
+                        toggleGrid();
                         break;
                     default:
                         break;
@@ -138,22 +140,10 @@ void YuvPlayer::play(string file, int fps)
     free(raw);
 }
 
-void YuvPlayer::drawGrid()
+void YuvPlayer::toggleGrid()
 {
-//    cout << "drawGrid" << endl;
-//    SDL_RenderClear(renderer);
-//                    SDL_SetRenderDrawColor(renderer, 255, 255, 255, SDL_ALPHA_OPAQUE);
-//
-//    if(SDL_RenderDrawLine(renderer, 10, 10, 200, 200) == -1){
-//        cout << "draw line error" << endl;
-//    }
-//    SDL_RenderCopy(renderer, texture, nullptr, nullptr);
-//    SDL_RenderPresent(renderer);
-
-//    SDL_UpdateTexture(texture, nullptr, raw, width * SDL_BYTESPERPIXEL(SDL_PIXELFORMAT_IYUV));
-    SDL_RenderClear(renderer);
-    SDL_RenderCopy(renderer, texture, nullptr, nullptr);
-    SDL_RenderPresent(renderer);
+    isShowingGrid = !isShowingGrid;
+    updateRenderer(raw);
 }
 
 
@@ -174,12 +164,21 @@ bool YuvPlayer::readFrame(ifstream& in, uint8_t *raw, size_t size)
 
 void YuvPlayer::updateRenderer(uint8_t *raw)
 {    
-    if (frameCnt == 10){
-        memset(raw, 0x00, 1280 * 720);
-    }
     SDL_UpdateTexture(texture, nullptr, raw, width * SDL_BYTESPERPIXEL(SDL_PIXELFORMAT_IYUV));
     SDL_RenderClear(renderer);
     SDL_RenderCopy(renderer, texture, nullptr, nullptr);
+
+    if(isShowingGrid){
+        SDL_SetRenderDrawColor( renderer, 0x00, 0x00, 0xFF, 0xFF );            
+        //SDL_RenderDrawLine( renderer, 0, height / 2, width, height / 2 );
+        SDL_RenderDrawLine( renderer, 0, height / 3, width, height / 3 );
+        SDL_RenderDrawLine( renderer, 0, height * 2 / 3, width, height * 2 / 3 );
+
+        SDL_RenderDrawLine( renderer, width / 3, 0, width / 3, height );
+        SDL_RenderDrawLine( renderer, width * 2 / 3, 0, width * 2 / 3, height );
+
+    }
+
     SDL_RenderPresent(renderer);
 }
 
@@ -187,6 +186,6 @@ int main(int argc, char* argv[])
 {
     string fname = "out.yuv";
     YuvPlayer player(1280, 720);
-    //player.play(fname, 25);
-    player.play(fname);
+    player.play(fname, 25);
+    //player.play(fname);
 }