Skip to content

Commit fbd6827

Browse files
committed
Two factory methods.
1 parent 4fa9c71 commit fbd6827

File tree

4 files changed

+18
-59
lines changed

4 files changed

+18
-59
lines changed

modules/cudacodec/include/opencv2/cudacodec.hpp

Lines changed: 6 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -231,10 +231,11 @@ class CV_EXPORTS_W VideoWriter
231231
@param codec Codec.
232232
@param fps Framerate of the created video stream.
233233
@param colorFormat OpenCv color format of the frames to be encoded.
234+
@param encoderCallback Callbacks for video encoder. See cudacodec::EncoderCallback. Required for working with the encoded video stream.
234235
@param stream Stream for frame pre-processing.
235236
*/
236-
CV_EXPORTS_W Ptr<cudacodec::VideoWriter> createVideoWriter(const String& fileName, const Size frameSize, const CODEC_VW codec = CODEC_VW::H264,
237-
const double fps = 25.0, const COLOR_FORMAT_VW colorFormat = BGR, const Stream& stream = Stream::Null());
237+
CV_EXPORTS_W Ptr<cudacodec::VideoWriter> createVideoWriter(const String& fileName, const Size frameSize, const CODEC_VW codec = CODEC_VW::H264, const double fps = 25.0,
238+
const COLOR_FORMAT_VW colorFormat = BGR, Ptr<EncoderCallback> encoderCallback = 0, const Stream& stream = Stream::Null());
238239

239240
/** @brief Creates video writer.
240241
@@ -244,39 +245,11 @@ CV_EXPORTS_W Ptr<cudacodec::VideoWriter> createVideoWriter(const String& fileNam
244245
@param fps Framerate of the created video stream.
245246
@param colorFormat OpenCv color format of the frames to be encoded.
246247
@param params Additional encoding parameters.
248+
@param encoderCallback Callbacks for video encoder. See cudacodec::EncoderCallback. Required for working with the encoded video stream.
247249
@param stream Stream for frame pre-processing.
248250
*/
249-
CV_EXPORTS_W Ptr<cudacodec::VideoWriter> createVideoWriter(const String& fileName, const Size frameSize, const CODEC_VW codec,
250-
const double fps, const COLOR_FORMAT_VW colorFormat, const EncoderParams& params, const Stream& stream = Stream::Null());
251-
252-
/** @brief Creates video writer.
253-
254-
@param encoderCallback Callbacks for video encoder. See cudacodec::EncoderCallback . Use it if you want to work with the raw video stream.
255-
@param frameSize Size of the input video frames.
256-
@param codec Codec.
257-
@param fps Framerate of the created video stream.
258-
@param colorFormat OpenCv color format of the frames to be encoded.
259-
@param stream Stream for frame pre-processing.
260-
261-
The constructors initialize video writer. User can implement their own multiplexing with cudacodec::EncoderCallback.
262-
*/
263-
CV_EXPORTS_W Ptr<cudacodec::VideoWriter> createVideoWriter(const Ptr<EncoderCallback>& encoderCallback, const Size frameSize, const CODEC_VW codec = CODEC_VW::H264,
264-
const double fps = 25.0, const COLOR_FORMAT_VW colorFormat = BGR, const Stream& stream = Stream::Null());
265-
266-
/** @brief Creates video writer.
267-
268-
@param encoderCallback Callbacks for video encoder. See cudacodec::EncoderCallback . Use it if you want to work with the raw video stream.
269-
@param frameSize Size of the input video frames.
270-
@param codec Codec.
271-
@param fps Framerate of the created video stream.
272-
@param colorFormat OpenCv color format of the frames to be encoded.
273-
@param params Additional encoding parameters.
274-
@param stream Stream for frame pre-processing.
275-
276-
The constructors initialize video writer. User can implement their own multiplexing with cudacodec::EncoderCallback.
277-
*/
278-
CV_EXPORTS_W Ptr<cudacodec::VideoWriter> createVideoWriter(const Ptr<EncoderCallback>& encoderCallback, const Size frameSize, const CODEC_VW codec,
279-
const double fps, const COLOR_FORMAT_VW colorFormat, const EncoderParams& params, const Stream& stream = Stream::Null());
251+
CV_EXPORTS_W Ptr<cudacodec::VideoWriter> createVideoWriter(const String& fileName, const Size frameSize, const CODEC_VW codec, const double fps, const COLOR_FORMAT_VW colorFormat,
252+
const EncoderParams& params, Ptr<EncoderCallback> encoderCallback = 0, const Stream& stream = Stream::Null());
280253

281254
////////////////////////////////// Video Decoding //////////////////////////////////////////
282255

modules/cudacodec/perf/perf_video.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ PERF_TEST_P(WriteToFile, VideoWriter, Combine(VIDEO_SRC, COLOR_FORMAT, CODEC))
147147
frames.push_back(frame);
148148
}
149149
stream.waitForCompletion();
150-
cv::Ptr<cv::cudacodec::VideoWriter> d_writer = cv::cudacodec::createVideoWriter(outputFile, frameBgr.size(), codec, fps, surfaceFormat, stream);
150+
cv::Ptr<cv::cudacodec::VideoWriter> d_writer = cv::cudacodec::createVideoWriter(outputFile, frameBgr.size(), codec, fps, surfaceFormat, 0, stream);
151151
for (int i = 0; i < nFrames - 1; ++i) {
152152
startTimer();
153153
d_writer->write(frames[i]);

modules/cudacodec/src/video_writer.cpp

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,8 @@ using namespace cv::cuda;
4848

4949
#if !defined(HAVE_NVCUVENC)
5050

51-
Ptr<cudacodec::VideoWriter> createVideoWriter(const String&, const Size, const CODEC_VW, const double, const COLOR_FORMAT_VW, const cv::cuda::Stream&) { throw_no_cuda(); return Ptr<cv::cudacodec::VideoWriter>(); }
52-
Ptr<cudacodec::VideoWriter> createVideoWriter(const String&, const Size, const CODEC_VW, const double, const COLOR_FORMAT_VW, const EncoderParams&, const cv::cuda::Stream&) { throw_no_cuda(); return Ptr<cv::cudacodec::VideoWriter>(); }
53-
Ptr<cudacodec::VideoWriter> createVideoWriter(const Ptr<EncoderCallback>&, const Size, const CODEC_VW codec, const double, const COLOR_FORMAT_VW, const cv::cuda::Stream&) { throw_no_cuda(); return Ptr<cv::cudacodec::VideoWriter>(); }
54-
Ptr<cudacodec::VideoWriter> createVideoWriter(const Ptr<EncoderCallback>&, const Size, const CODEC_VW, const double, const COLOR_FORMAT_VW, const EncoderParams&, const cv::cuda::Stream&) { throw_no_cuda(); return Ptr<cv::cudacodec::VideoWriter>(); }
51+
Ptr<cudacodec::VideoWriter> createVideoWriter(const String&, const Size, const CODEC_VW, const double, const COLOR_FORMAT_VW, const Ptr<EncoderCallback>, const cv::cuda::Stream&) { throw_no_cuda(); return Ptr<cv::cudacodec::VideoWriter>(); }
52+
Ptr<cudacodec::VideoWriter> createVideoWriter(const String&, const Size, const CODEC_VW, const double, const COLOR_FORMAT_VW, const EncoderParams&, const Ptr<EncoderCallback>, const cv::cuda::Stream&) { throw_no_cuda(); return Ptr<cv::cudacodec::VideoWriter>(); }
5553

5654
#else // !defined HAVE_NVCUVENC
5755

@@ -376,29 +374,17 @@ EncoderParams VideoWriterImpl::getEncoderParams() const {
376374
return encoderParams;
377375
};
378376

379-
Ptr<VideoWriter> createVideoWriter(const String& fileName, const Size frameSize, const CODEC_VW codec, const double fps,
380-
const COLOR_FORMAT_VW colorFormat, const Stream& stream)
381-
{
382-
Ptr<EncoderCallback> rawVideoWriter = new RawVideoWriter(fileName);
383-
return createVideoWriter(rawVideoWriter, frameSize, codec, fps, colorFormat, stream);
384-
}
385-
386-
Ptr<VideoWriter> createVideoWriter(const String& fileName, const Size frameSize, const CODEC_VW codec, const double fps,
387-
const COLOR_FORMAT_VW colorFormat, const EncoderParams& params, const Stream& stream)
388-
{
389-
Ptr<EncoderCallback> rawVideoWriter = new RawVideoWriter(fileName);
390-
return createVideoWriter(rawVideoWriter, frameSize, codec, fps, colorFormat, params, stream);
391-
}
392-
393-
Ptr<VideoWriter> createVideoWriter(const Ptr<EncoderCallback>& encoderCallback, const Size frameSize, const CODEC_VW codec, const double fps,
394-
const COLOR_FORMAT_VW colorFormat, const Stream& stream)
377+
Ptr<VideoWriter> createVideoWriter(const String& fileName, const Size frameSize, const CODEC_VW codec, const double fps, const COLOR_FORMAT_VW colorFormat,
378+
Ptr<EncoderCallback> encoderCallback, const Stream& stream)
395379
{
380+
encoderCallback = encoderCallback ? encoderCallback : new RawVideoWriter(fileName);
396381
return makePtr<VideoWriterImpl>(encoderCallback, frameSize, codec, fps, colorFormat, stream);
397382
}
398383

399-
Ptr<VideoWriter> createVideoWriter(const Ptr<EncoderCallback>& encoderCallback, const Size frameSize, const CODEC_VW codec, const double fps,
400-
const COLOR_FORMAT_VW colorFormat, const EncoderParams& params, const Stream& stream)
384+
Ptr<VideoWriter> createVideoWriter(const String& fileName, const Size frameSize, const CODEC_VW codec, const double fps, const COLOR_FORMAT_VW colorFormat,
385+
const EncoderParams& params, Ptr<EncoderCallback> encoderCallback, const Stream& stream)
401386
{
387+
encoderCallback = encoderCallback ? encoderCallback : new RawVideoWriter(fileName);
402388
return makePtr<VideoWriterImpl>(encoderCallback, frameSize, codec, fps, colorFormat, params, stream);
403389
}
404390

modules/cudacodec/test/test_video.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ CUDA_TEST_P(TransCode, H264ToH265)
463463
Mat tst; frame.download(tst);
464464
if (writer.empty()) {
465465
frameSz = Size(fmt.width, fmt.height);
466-
writer = cv::cudacodec::createVideoWriter(outputFile, frameSz, codec, fps, colorFormat, stream);
466+
writer = cv::cudacodec::createVideoWriter(outputFile, frameSz, codec, fps, colorFormat, 0, stream);
467467
}
468468
writer->write(frame);
469469
}
@@ -537,7 +537,7 @@ CUDA_TEST_P(Write, Writer)
537537
ASSERT_FALSE(frame.empty());
538538
if (writer.empty()) {
539539
frameSz = frame.size();
540-
writer = cv::cudacodec::createVideoWriter(outputFile, frameSz, codec, fps, colorFormat, stream);
540+
writer = cv::cudacodec::createVideoWriter(outputFile, frameSz, codec, fps, colorFormat, 0, stream);
541541
}
542542
CvtColor(frame, frameNewSf, colorFormat);
543543
if (deviceSrc) {
@@ -618,7 +618,7 @@ CUDA_TEST_P(EncoderParams, Writer)
618618
dFrame.upload(frame);
619619
if (writer.empty()) {
620620
frameSz = frame.size();
621-
writer = cv::cudacodec::createVideoWriter(outputFile, frameSz, codec, fps, colorFormat, params, stream);
621+
writer = cv::cudacodec::createVideoWriter(outputFile, frameSz, codec, fps, colorFormat, params, 0, stream);
622622
cv::cudacodec::EncoderParams paramsOut = writer->getEncoderParams();
623623
ASSERT_EQ(params, paramsOut);
624624
}

0 commit comments

Comments
 (0)