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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy