Skip to content

Commit dac41e8

Browse files
author
Clement Champetier
committed
properties: added fillVector method to avoid copy of the vector
Fix #140
1 parent 9c1948f commit dac41e8

10 files changed

+31
-17
lines changed

src/AvTranscoder/properties/AudioProperties.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,12 +149,11 @@ size_t AudioProperties::getTicksPerFrame() const
149149
return _codecContext->ticks_per_frame;
150150
}
151151

152-
PropertyVector AudioProperties::asVector() const
152+
PropertyVector& AudioProperties::fillVector(PropertyVector& data) const
153153
{
154-
PropertyVector data;
155-
156154
// Add properties of base class
157-
PropertyVector basedProperty = StreamProperties::asVector();
155+
PropertyVector basedProperty;
156+
StreamProperties::fillVector(basedProperty);
158157
data.insert(data.begin(), basedProperty.begin(), basedProperty.end());
159158

160159
addProperty(data, "sampleFormatName", &AudioProperties::getSampleFormatName);

src/AvTranscoder/properties/AudioProperties.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class AvExport AudioProperties : public StreamProperties
3030
AVCodecContext& getAVCodecContext() { return *_codecContext; }
3131
#endif
3232

33-
PropertyVector asVector() const;
33+
PropertyVector& fillVector(PropertyVector& data) const;
3434

3535
private:
3636
#ifndef SWIG

src/AvTranscoder/properties/FileProperties.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,12 @@ size_t FileProperties::getNbStreams() const
210210

211211
PropertyVector FileProperties::asVector() const
212212
{
213-
PropertyVector data;
213+
PropertyVector propertyVector;
214+
return fillVector(propertyVector);
215+
}
214216

217+
PropertyVector& FileProperties::fillVector(PropertyVector& data) const
218+
{
215219
addProperty(data, "filename", &FileProperties::getFilename);
216220
addProperty(data, "formatName", &FileProperties::getFormatName);
217221
addProperty(data, "formatLongName", &FileProperties::getFormatLongName);

src/AvTranscoder/properties/FileProperties.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ class AvExport FileProperties
8585
std::string asJson() const; ///< Return all format properties as a json format.
8686
PropertyMap asMap() const; ///< Return format properties as a map (name of property, value)
8787
PropertyVector asVector() const; ///< Return format properties as a vector (name of property: value)
88+
PropertyVector& fillVector(PropertyVector& data) const; ///< To avoid copy of the vector
8889

8990
private:
9091
#ifndef SWIG

src/AvTranscoder/properties/PixelProperties.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,8 +235,12 @@ std::vector<Channel> PixelProperties::getChannels() const
235235

236236
PropertyVector PixelProperties::asVector() const
237237
{
238-
PropertyVector data;
238+
PropertyVector propertyVector;
239+
return fillVector(propertyVector);
240+
}
239241

242+
PropertyVector& PixelProperties::fillVector(PropertyVector& data) const
243+
{
240244
addProperty(data, "pixelName", &PixelProperties::getPixelName);
241245
addProperty(data, "pixelFormatName", &PixelProperties::getPixelFormatName);
242246
addProperty(data, "bitDepth", &PixelProperties::getBitsPerPixel);

src/AvTranscoder/properties/PixelProperties.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ class AvExport PixelProperties
8181
#endif
8282

8383
PropertyVector asVector() const; ///< Return all pixel properties as a vector (name of property: value)
84+
PropertyVector& fillVector(PropertyVector& data) const; ///< To avoid copy of the vector
8485

8586
private:
8687
void init(const AVPixelFormat avPixelFormat);

src/AvTranscoder/properties/StreamProperties.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,12 @@ std::string StreamProperties::getCodecLongName() const
100100

101101
PropertyVector StreamProperties::asVector() const
102102
{
103-
PropertyVector data;
103+
PropertyVector propertyVector;
104+
return fillVector(propertyVector);
105+
}
104106

107+
PropertyVector& StreamProperties::fillVector(PropertyVector& data) const
108+
{
105109
addProperty(data, "streamId", &StreamProperties::getStreamId);
106110
addProperty(data, "streamIndex", &StreamProperties::getStreamIndex);
107111
addProperty(data, "timeBase", &StreamProperties::getTimeBase);

src/AvTranscoder/properties/StreamProperties.hpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,10 @@ class AvExport StreamProperties
3131
const AVFormatContext& getAVFormatContext() const { return *_formatContext; }
3232
#endif
3333

34-
std::string asJson() const; ///< Return all properties as a json format.
35-
PropertyMap asMap() const; ///< Return all properties as a map (name of property, value)
36-
virtual PropertyVector asVector() const; ///< Same data with a specific order
34+
std::string asJson() const; ///< Return all properties as a json format.
35+
PropertyMap asMap() const; ///< Return all properties as a map (name of property, value)
36+
PropertyVector asVector() const; ///< Same data with a specific order
37+
virtual PropertyVector& fillVector(PropertyVector& data) const; ///< To avoid copy of the vector
3738

3839
private:
3940
#ifndef SWIG

src/AvTranscoder/properties/VideoProperties.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -552,12 +552,11 @@ void VideoProperties::analyseGopStructure(IProgress& progress)
552552
}
553553
}
554554

555-
PropertyVector VideoProperties::asVector() const
555+
PropertyVector& VideoProperties::fillVector(PropertyVector& data) const
556556
{
557-
PropertyVector data;
558-
559557
// Add properties of base class
560-
PropertyVector basedProperty = StreamProperties::asVector();
558+
PropertyVector basedProperty;
559+
StreamProperties::fillVector(basedProperty);
561560
data.insert(data.begin(), basedProperty.begin(), basedProperty.end());
562561

563562
addProperty(data, "profile", &VideoProperties::getProfile);
@@ -598,7 +597,8 @@ PropertyVector VideoProperties::asVector() const
598597
addProperty(data, "referencesFrames", &VideoProperties::getReferencesFrames);
599598

600599
// Add properties of the pixel
601-
PropertyVector pixelProperties = _pixelProperties.asVector();
600+
PropertyVector pixelProperties;
601+
_pixelProperties.fillVector(pixelProperties);
602602
data.insert(data.end(), pixelProperties.begin(), pixelProperties.end());
603603

604604
return data;

src/AvTranscoder/properties/VideoProperties.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class AvExport VideoProperties : public StreamProperties
7979
const PixelProperties& getPixelProperties() const { return _pixelProperties; }
8080
#endif
8181

82-
PropertyVector asVector() const;
82+
PropertyVector& fillVector(PropertyVector& data) const;
8383

8484
private:
8585
/**

0 commit comments

Comments
 (0)