Skip to content

Commit 6dad33b

Browse files
refactoring player code in C++
1 parent af7e0d9 commit 6dad33b

File tree

5 files changed

+765
-644
lines changed

5 files changed

+765
-644
lines changed

app/avplay/AvReader.hpp

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
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

app/avplay/Reader.hpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#ifndef _AVPLAYER_READER_
2+
#define _AVPLAYER_READER_
3+
4+
class Reader
5+
{
6+
public:
7+
Reader()
8+
: currentFrame( 0 )
9+
{}
10+
11+
virtual size_t getWidth() = 0;
12+
virtual size_t getHeight() = 0;
13+
virtual size_t getComponents() = 0;
14+
virtual size_t getBitDepth() = 0;
15+
16+
virtual const char* readNextFrame() = 0;
17+
virtual const char* readPrevFrame() = 0;
18+
virtual const char* readFrameAt( const size_t frame ) = 0;
19+
20+
virtual void printMetadatas() = 0;
21+
22+
protected:
23+
24+
size_t currentFrame;
25+
};
26+
27+
#endif

0 commit comments

Comments
 (0)