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)
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