@@ -71,6 +71,14 @@ bool showGreenChannel = false;
71
71
bool showBlueChannel = false ;
72
72
bool showAlphaChannel = false ;
73
73
74
+ bool play = false ;
75
+
76
+ avtranscoder::InputStreamVideo* pInputStreamVideo = NULL ;
77
+ avtranscoder::ColorTransform ct;
78
+ avtranscoder::Image* pSourceImage = NULL ;
79
+ avtranscoder::Image* pImageToDisplay = NULL ;
80
+
81
+
74
82
void reshape (int width, int height)
75
83
{
76
84
float w, h, xPos, yPos;
@@ -132,6 +140,13 @@ void loadNewTexture( const char* data, GLint internalFormat, size_t width, size_
132
140
}
133
141
134
142
143
+ void readAndLoadNextFrame ()
144
+ {
145
+ pInputStreamVideo->readNextFrame ( *pSourceImage );
146
+ ct.convert ( *pSourceImage, *pImageToDisplay );
147
+ loadNewTexture ( (const char *)( pImageToDisplay->getPtr () ), img.component , img.width , img.height , img.format , img.type );
148
+ }
149
+
135
150
void reloadTexture ( )
136
151
{
137
152
loadNewTexture ( img );
@@ -269,6 +284,8 @@ void display()
269
284
270
285
void idle ()
271
286
{
287
+ if ( play )
288
+ readAndLoadNextFrame ();
272
289
}
273
290
274
291
void displayInformations ()
@@ -294,6 +311,7 @@ void displayHelp()
294
311
static const std::string kViewerHelp =
295
312
" Av Player Viewer Help\n " \
296
313
" i : information about image (dimensions, bit depth, channels)\n " \
314
+ " m : full metadatas of media\n " \
297
315
" z : zoom view to 1:1\n " \
298
316
" h, F1 : print help\n " \
299
317
" SHIFT + V : flip\n " \
@@ -356,9 +374,11 @@ void keyboard(unsigned char k, int x, int y)
356
374
{
357
375
case ' \r ' :
358
376
glutDestroyWindow (windowID);
377
+ windowID = 0 ;
359
378
break ;
360
379
case 27 : // ESCAPE key
361
380
glutDestroyWindow (windowID);
381
+ windowID = 0 ;
362
382
break ;
363
383
case ' i' :
364
384
displayInformations ();
@@ -368,15 +388,15 @@ void keyboard(unsigned char k, int x, int y)
368
388
currentZoom = 1.0 ;
369
389
x1Quad = -1.0 ;
370
390
x2Quad = 1.0 ;
371
- y1Quad = - 1.0 ;
372
- y2Quad = 1.0 ;
391
+ y1Quad = 1.0 ;
392
+ y2Quad = - 1.0 ;
373
393
glutPostRedisplay ();
374
394
break ;
375
395
case ' h' :
376
396
displayHelp ();
377
397
break ;
378
398
case SPACEBAR:
379
- glutDestroyWindow (windowID) ;
399
+ play = !play ;
380
400
break ;
381
401
382
402
case ' r' :
@@ -425,6 +445,7 @@ void specialKeyboard( int k, int x, int y)
425
445
break ;
426
446
case GLUT_KEY_RIGHT:
427
447
// cursor move
448
+ readAndLoadNextFrame ();
428
449
break ;
429
450
case GLUT_KEY_F1:
430
451
displayHelp ();
@@ -547,8 +568,8 @@ void openGLWindow( const size_t& width, const size_t& height )
547
568
548
569
x1Quad = -1.0 ;
549
570
x2Quad = 1.0 ;
550
- y1Quad = - 1.0 ;
551
- y2Quad = 1.0 ;
571
+ y1Quad = 1.0 ;
572
+ y2Quad = - 1.0 ;
552
573
553
574
glutDisplayFunc (display);
554
575
@@ -568,29 +589,42 @@ int main( int argc, char** argv )
568
589
avtranscoder::InputFile inputFile ( argv[1 ] );
569
590
570
591
inputFile.analyse ();
571
- size_t width = inputFile.getProperties ().videoStreams .at (0 ).width ;
572
- size_t height = inputFile.getProperties ().videoStreams .at (0 ).height ;
573
- size_t components = 3 ;
574
- GLenum format = GL_RGB;
575
- GLenum type = GL_UNSIGNED_BYTE;
592
+ img. width = inputFile.getProperties ().videoStreams .at (0 ).width ;
593
+ img. height = inputFile.getProperties ().videoStreams .at (0 ).height ;
594
+ img. component = 3 ;
595
+ img. format = GL_RGB;
596
+ img. type = GL_UNSIGNED_BYTE;
576
597
// GLenum type = GL_UNSIGNED_SHORT;
577
598
578
599
avtranscoder::InputStreamVideo inputStreamVideo ( inputFile.getStream ( 0 ) );
600
+ pInputStreamVideo = &inputStreamVideo;
579
601
avtranscoder::Image sourceImage ( inputFile.getStream ( 0 ).getVideoDesc ().getImageDesc () );
580
602
581
- avtranscoder::Image imageToDisplay ( sourceImage );
603
+ avtranscoder::Pixel pixel;
604
+ pixel.setBitsPerPixel ( img.component * 8 );
605
+ pixel.setComponents ( img.component );
606
+ pixel.setColorComponents ( avtranscoder::eComponentRgb );
607
+ pixel.setSubsampling ( avtranscoder::eSubsamplingNone );
608
+ pixel.setAlpha ( false );
609
+ pixel.setPlanar ( false );
610
+
611
+ avtranscoder::ImageDesc imageDescToDisplay;
582
612
583
- inputStreamVideo.readNextFrame ( sourceImage );
613
+ imageDescToDisplay.setWidth ( sourceImage.desc ().getWidth () );
614
+ imageDescToDisplay.setHeight ( sourceImage.desc ().getHeight () );
615
+ imageDescToDisplay.setDar ( sourceImage.desc ().getDar () );
616
+ imageDescToDisplay.setPixel ( pixel.findPixel () );
584
617
585
- avtranscoder::ColorTransform ct;
586
- ct.convert ( sourceImage, imageToDisplay );
618
+ avtranscoder::Image imageToDisplay ( imageDescToDisplay );
587
619
588
- openGLWindow ( width, height );
620
+ pSourceImage = &sourceImage;
621
+ pImageToDisplay = &imageToDisplay;
589
622
623
+ openGLWindow ( img.width , img.height );
590
624
591
- loadNewTexture ( ( const char *)( imageToDisplay. getPtr () ), components, width, height, format, type );
625
+ readAndLoadNextFrame ( );
592
626
593
- glutIdleFunc (idle);
627
+ glutIdleFunc ( idle );
594
628
glutMainLoop ();
595
629
596
630
std::cout << " avplay end ..." << std::endl;
0 commit comments