namespace cv::cudacodec

namespace cudacodec {

// enums

enum ChromaFormat;
enum Codec;
enum SurfaceFormat;

// structs

struct EncoderParams;
struct FormatInfo;

// classes

class EncoderCallBack;
class RawVideoSource;
class VideoReader;
class VideoWriter;

// global functions

Ptr<VideoReader>
createVideoReader(const String& filename);

Ptr<VideoReader>
createVideoReader(const Ptr<RawVideoSource>& source);

Ptr<VideoWriter>
createVideoWriter(
    const String& fileName,
    Size frameSize,
    double fps,
    SurfaceFormat format = SF_BGR
    );

Ptr<VideoWriter>
createVideoWriter(
    const String& fileName,
    Size frameSize,
    double fps,
    const EncoderParams& params,
    SurfaceFormat format = SF_BGR
    );

Ptr<VideoWriter>
createVideoWriter(
    const Ptr<EncoderCallBack>& encoderCallback,
    Size frameSize,
    double fps,
    SurfaceFormat format = SF_BGR
    );

Ptr<VideoWriter>
createVideoWriter(
    const Ptr<EncoderCallBack>& encoderCallback,
    Size frameSize,
    double fps,
    const EncoderParams& params,
    SurfaceFormat format = SF_BGR
    );

} // namespace cudacodec