Skip to content

Commit e211239

Browse files
adding Data stream processing
1 parent d1d4e18 commit e211239

File tree

10 files changed

+87
-4
lines changed

10 files changed

+87
-4
lines changed

src/AvTranscoder/CodedStream/AvInputStream.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,12 @@ AudioDesc AvInputStream::getAudioDesc() const
131131
return desc;
132132
}
133133

134+
DataDesc AvInputStream::getDataDesc() const
135+
{
136+
DataDesc desc;
137+
return desc;
138+
}
139+
134140
AVMediaType AvInputStream::getStreamType() const
135141
{
136142
return _inputFile->getStreamType( _streamIndex );

src/AvTranscoder/CodedStream/AvInputStream.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class AvExport AvInputStream : public InputStream
3333
// Stream properties
3434
VideoDesc getVideoDesc() const;
3535
AudioDesc getAudioDesc() const;
36+
DataDesc getDataDesc() const;
3637

3738
AVMediaType getStreamType() const;
3839

src/AvTranscoder/CodedStream/InputStream.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <AvTranscoder/CodedStructures/DataStream.hpp>
55
#include <AvTranscoder/CodedStructures/AudioDesc.hpp>
66
#include <AvTranscoder/CodedStructures/VideoDesc.hpp>
7+
#include <AvTranscoder/CodedStructures/DataDesc.hpp>
78

89
namespace avtranscoder
910
{
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#include "DataDesc.hpp"
2+
3+
namespace avtranscoder
4+
{
5+
6+
DataDesc::DataDesc( const std::string& codecName )
7+
: CodedDesc( "" )
8+
{
9+
}
10+
11+
DataDesc::DataDesc( const AVCodecID codecId )
12+
: CodedDesc( "" )
13+
{
14+
}
15+
16+
DataDesc::DataDesc( const CodedDesc& essenceDesc )
17+
: CodedDesc( "" )
18+
{
19+
}
20+
21+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#ifndef _AV_TRANSCODER_CODED_STRUCTURES_DATA_DESC_HPP_
2+
#define _AV_TRANSCODER_CODED_STRUCTURES_DATA_DESC_HPP_
3+
4+
#include "CodedDesc.hpp"
5+
#include <AvTranscoder/common.hpp>
6+
7+
#include <string>
8+
9+
namespace avtranscoder
10+
{
11+
12+
class AvExport DataDesc : public CodedDesc
13+
{
14+
public:
15+
DataDesc( const std::string& codecName = "" );
16+
DataDesc( const AVCodecID codecId );
17+
DataDesc( const CodedDesc& essenceDesc );
18+
};
19+
20+
}
21+
22+
#endif

src/AvTranscoder/File/OutputFile.cpp

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,21 @@ OutputStream& OutputFile::addAudioStream( const AudioDesc& audioDesc )
110110
return *_outputStreams.back();
111111
}
112112

113+
OutputStream& OutputFile::addDataStream( const DataDesc& dataDesc )
114+
{
115+
assert( _formatContext != NULL );
116+
117+
if( ( _stream = avformat_new_stream( _formatContext, dataDesc.getCodec() ) ) == NULL )
118+
{
119+
throw std::runtime_error( "unable to add new data stream" );
120+
}
121+
122+
AvOutputStream* avOutputStream = new AvOutputStream( *this, _formatContext->nb_streams - 1 );
123+
_outputStreams.push_back( avOutputStream );
124+
125+
return *_outputStreams.back();
126+
}
127+
113128
OutputStream& OutputFile::getStream( const size_t streamId )
114129
{
115130
if( streamId >= _outputStreams.size() )
@@ -135,6 +150,8 @@ bool OutputFile::beginWrap( )
135150

136151
bool OutputFile::wrap( const DataStream& data, const size_t streamId )
137152
{
153+
if( ! data.getSize() )
154+
return true;
138155
if( _verbose )
139156
std::cout << "wrap on stream " << streamId << " (" << data.getSize() << " bytes for frame " << _frameCount.at( streamId ) << ")" << std::endl;
140157
AVPacket packet;
@@ -149,8 +166,8 @@ bool OutputFile::wrap( const DataStream& data, const size_t streamId )
149166
// packet.dts = _frameCount.at( streamId );
150167
// packet.pts = ;
151168

152-
int ret = av_write_frame( _formatContext, &packet );
153-
// int ret = av_interleaved_write_frame( _formatContext, &packet );
169+
// int ret = av_write_frame( _formatContext, &packet );
170+
int ret = av_interleaved_write_frame( _formatContext, &packet );
154171

155172
if( ret != 0 )
156173
{

src/AvTranscoder/File/OutputFile.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <AvTranscoder/CodedStructures/DataStream.hpp>
77
#include <AvTranscoder/CodedStructures/VideoDesc.hpp>
88
#include <AvTranscoder/CodedStructures/AudioDesc.hpp>
9+
#include <AvTranscoder/CodedStructures/DataDesc.hpp>
910

1011
#include <AvTranscoder/CodedStream/AvOutputStream.hpp>
1112

@@ -59,6 +60,13 @@ class AvExport OutputFile
5960
**/
6061
virtual OutputStream& addAudioStream( const AudioDesc& audioDesc );
6162

63+
/**
64+
* @brief Add an data output stream using the description.
65+
* @note call setup() before adding any stream
66+
* @param dataDesc description of output stream
67+
**/
68+
virtual OutputStream& addDataStream( const DataDesc& dataDesc );
69+
6270
/**
6371
* @brief get the output stream description.
6472
* @param streamId select the output stream

src/AvTranscoder/Transcoder/StreamTranscoder.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,15 +198,15 @@ StreamTranscoder::StreamTranscoder(
198198
AudioFrameDesc inputAudioFrameDesc = static_cast<DummyAudio*>( _inputEssence )->getAudioDesc().getFrameDesc();
199199
outputAudio->setProfile( profile, inputAudioFrameDesc );
200200

201-
static_cast<DummyAudio*>( _inputEssence )->setAudioDesc( outputAudio->getAudioDesc() );
201+
static_cast<DummyAudio*>( _dummyEssence )->setAudioDesc( outputAudio->getAudioDesc() );
202202

203203
_outputStream = &outputFile.addAudioStream( outputAudio->getAudioDesc() );
204204
_sourceBuffer = new AudioFrame( outputAudio->getAudioDesc().getFrameDesc() );
205205
_frameBuffer = new AudioFrame( outputAudio->getAudioDesc().getFrameDesc() );
206206

207207
_transform = new AudioEssenceTransform();
208208

209-
_currentEssence = _inputEssence;
209+
_currentEssence = _dummyEssence;
210210
return;
211211
}
212212

src/AvTranscoder/Transcoder/StreamTranscoder.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,17 @@ class StreamTranscoder
4343
*/
4444
bool processFrame();
4545

46+
bool processLastFrame();
47+
4648
bool isTranscodeStream() const { return _transcodeStream; }
4749

4850
void setVerbose( bool verbose = true ){ _verbose = verbose; }
4951

5052
void switchToDummyEssence();
5153
void switchToInputEssence();
54+
55+
bool isDummyEssence() { return _dummyEssence == _currentEssence; }
56+
5257
void setInfinityProcess( bool infinity = true ){ _infiniteProcess = infinity; }
5358

5459
private:

src/AvTranscoder/avTranscoder.i

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include <AvTranscoder/CodedStructures/CodedDesc.hpp>
2222
#include <AvTranscoder/CodedStructures/VideoDesc.hpp>
2323
#include <AvTranscoder/CodedStructures/AudioDesc.hpp>
24+
#include <AvTranscoder/CodedStructures/DataDesc.hpp>
2425
#include <AvTranscoder/CodedStructures/DataStream.hpp>
2526

2627
#include <AvTranscoder/Metadatas/MediaMetadatasStructures.hpp>
@@ -77,6 +78,7 @@ namespace std {
7778
%include <AvTranscoder/CodedStructures/CodedDesc.hpp>
7879
%include <AvTranscoder/CodedStructures/VideoDesc.hpp>
7980
%include <AvTranscoder/CodedStructures/AudioDesc.hpp>
81+
%include <AvTranscoder/CodedStructures/DataDesc.hpp>
8082
%include <AvTranscoder/CodedStructures/DataStream.hpp>
8183

8284
%include <AvTranscoder/Metadatas/MediaMetadatasStructures.hpp>

0 commit comments

Comments
 (0)