1
+ #ifndef _AVPLAYER_AVREADER_
2
+ #define _AVPLAYER_AVREADER_
3
+
4
+
5
+ #include < AvTranscoder/InputStream.hpp>
6
+ #include < AvTranscoder/InputStreamAudio.hpp>
7
+ #include < AvTranscoder/InputStreamVideo.hpp>
8
+ #include < AvTranscoder/InputFile.hpp>
9
+
10
+ #include < AvTranscoder/ColorTransform.hpp>
11
+
12
+ #include < AvTranscoder/Metadatas/Print.hpp>
13
+
14
+ #include " Reader.hpp"
15
+
16
+ class AvReader : public Reader
17
+ {
18
+ public:
19
+ AvReader ( std::string filename )
20
+ : m_inputFile( filename )
21
+ , m_inputStreamVideo( NULL )
22
+ , m_sourceImage( NULL )
23
+ , m_imageToDisplay( NULL )
24
+ {
25
+ m_inputFile.analyse ();
26
+ m_videoStream = m_inputFile.getProperties ().videoStreams .at (0 ).streamId ;
27
+
28
+ m_inputFile.readStream ( m_videoStream );
29
+
30
+ m_inputStreamVideo = new avtranscoder::InputStreamVideo ( m_inputFile.getStream ( m_videoStream ) );
31
+
32
+ m_sourceImage = new avtranscoder::Image ( m_inputFile.getStream ( m_videoStream ).getVideoDesc ().getImageDesc () );
33
+
34
+ pixel.setBitsPerPixel ( getComponents () * getBitDepth () );
35
+ pixel.setComponents ( getComponents () );
36
+ pixel.setColorComponents ( avtranscoder::eComponentRgb );
37
+ pixel.setSubsampling ( avtranscoder::eSubsamplingNone );
38
+ pixel.setAlpha ( false );
39
+ pixel.setPlanar ( false );
40
+
41
+ imageDescToDisplay.setWidth ( m_sourceImage->desc ().getWidth () );
42
+ imageDescToDisplay.setHeight ( m_sourceImage->desc ().getHeight () );
43
+ imageDescToDisplay.setDar ( m_sourceImage->desc ().getDar () );
44
+
45
+ imageDescToDisplay.setPixel ( pixel.findPixel () );
46
+
47
+ m_imageToDisplay = new avtranscoder::Image ( imageDescToDisplay );
48
+ }
49
+
50
+ ~AvReader ()
51
+ {
52
+ delete m_inputStreamVideo;
53
+ delete m_sourceImage;
54
+ delete m_imageToDisplay;
55
+ }
56
+
57
+ size_t getWidth ()
58
+ {
59
+ return m_inputFile.getProperties ().videoStreams .at (0 ).width ;
60
+ };
61
+
62
+ size_t getHeight ()
63
+ {
64
+ return m_inputFile.getProperties ().videoStreams .at (0 ).height ;
65
+ }
66
+
67
+ size_t getComponents ()
68
+ {
69
+ return m_inputFile.getProperties ().videoStreams .at (0 ).componentsCount ;
70
+ }
71
+
72
+ size_t getBitDepth ()
73
+ {
74
+ return 8 ;
75
+ }
76
+
77
+ const char * readNextFrame ()
78
+ {
79
+ ++currentFrame;
80
+ m_inputStreamVideo->readNextFrame ( *m_sourceImage );
81
+ m_colorTransform.convert ( *m_sourceImage, *m_imageToDisplay );
82
+ return (const char *)m_imageToDisplay->getPtr ();
83
+ }
84
+
85
+ const char * readPrevFrame ()
86
+ {
87
+ --currentFrame;
88
+ return readFrameAt ( currentFrame );
89
+ }
90
+
91
+ const char * readFrameAt ( const size_t frame )
92
+ {
93
+ // TODO seek @ frame
94
+
95
+ m_inputStreamVideo->readNextFrame ( *m_sourceImage );
96
+ m_colorTransform.convert ( *m_sourceImage, *m_imageToDisplay );
97
+ return (const char *)m_imageToDisplay->getPtr ();
98
+ }
99
+
100
+ void printMetadatas ()
101
+ {
102
+ displayMetadatas ( m_inputFile );
103
+ }
104
+
105
+ private:
106
+ avtranscoder::InputFile m_inputFile;
107
+ avtranscoder::InputStreamVideo* m_inputStreamVideo;
108
+
109
+ avtranscoder::Image* m_sourceImage;
110
+ avtranscoder::Image* m_imageToDisplay;
111
+
112
+ avtranscoder::Pixel pixel;
113
+ avtranscoder::ImageDesc imageDescToDisplay;
114
+
115
+ avtranscoder::ColorTransform m_colorTransform;
116
+ size_t m_videoStream;
117
+ };
118
+
119
+ #endif
0 commit comments