DecklinkWriter.h
Go to the documentation of this file.
/**
* @file
* @brief Header file for DecklinkWriter class
* @author Jonathan Thomas <jonathan@openshot.org>
*
* @ref License
*/
/* LICENSE
*
* Copyright (c) 2008-2019 OpenShot Studios, LLC
* <http://www.openshotstudios.com/>. This file is part of
* OpenShot Library (libopenshot), an open-source project dedicated to
* delivering high quality video editing and animation solutions to the
* world. For more information visit <http://www.openshot.org/>.
*
* OpenShot Library (libopenshot) is free software: you can redistribute it
* and/or modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* OpenShot Library (libopenshot) is distributed in the hope that it will be
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with OpenShot Library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef OPENSHOT_DECKLINK_WRITER_H
#define OPENSHOT_DECKLINK_WRITER_H
#include "WriterBase.h"
#include <cmath>
#include <ctime>
#include <fcntl.h>
#include <iostream>
#include <omp.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory>
#include <unistd.h>
#include "CacheMemory.h"
#include "Exceptions.h"
#include "Frame.h"
#include "DecklinkOutput.h"
namespace openshot
{
/**
* @brief This class uses the Blackmagic Decklink libraries, to send video streams to Blackmagic devices.
*
* This requires special hardware manufactured by <a href="http://www.blackmagicdesign.com/products">Blackmagic Designs</a>.
* Once the device is acquired and connected, this reader returns openshot::Frame objects containing the image and audio data.
*/
class DecklinkWriter : public WriterBase
{
private:
bool is_open;
IDeckLink *deckLink;
IDeckLinkDisplayModeIterator *displayModeIterator;
IDeckLinkOutput *deckLinkOutput;
IDeckLinkVideoConversion *m_deckLinkConverter;
pthread_mutex_t sleepMutex;
pthread_cond_t sleepCond;
IDeckLinkIterator *deckLinkIterator;
DeckLinkOutputDelegate *delegate;
IDeckLinkDisplayMode *displayMode;
BMDVideoInputFlags inputFlags;
BMDDisplayMode selectedDisplayMode;
BMDPixelFormat pixelFormat;
int displayModeCount;
int exitStatus;
int ch;
bool foundDisplayMode;
HRESULT result;
int g_videoModeIndex;
int g_audioChannels;
int g_audioSampleDepth;
int g_maxFrames;
int device;
public:
/// Constructor for DecklinkWriter. This automatically opens the device or it
/// throws one of the following exceptions.
DecklinkWriter(int device, int video_mode, int pixel_format, int channels, int sample_depth);
/// Close the device and video stream
void Close();
/// This method is required for all derived classes of WriterBase. Write a Frame to the video file.
void WriteFrame(std::shared_ptr<Frame> frame);
/// This method is required for all derived classes of WriterBase. Write a block of frames from a reader.
void WriteFrame(ReaderBase* reader, int start, int length);
/// Open device and video stream - which is called by the constructor automatically
void Open();
/// Determine if writer is open or closed
bool IsOpen() { return is_open; };
};
}
#endif
CacheMemory.h
Header file for CacheMemory class.
DecklinkOutput.h
Header file for DecklinkOutput class.
Exceptions.h
Header file for all Exception classes.
Frame.h
Header file for Frame class.
WriterBase.h
Header file for WriterBase class.
DeckLinkOutputDelegate
Implementation of the Blackmagic Decklink API (used by the DecklinkWriter)
Definition: DecklinkOutput.h:79
openshot::DecklinkWriter
This class uses the Blackmagic Decklink libraries, to send video streams to Blackmagic devices.
Definition: DecklinkWriter.h:63
openshot::DecklinkWriter::Close
void Close()
Close the device and video stream.
Definition: DecklinkWriter.cpp:193
openshot::DecklinkWriter::WriteFrame
void WriteFrame(std::shared_ptr< Frame > frame)
This method is required for all derived classes of WriterBase. Write a Frame to the video file.
Definition: DecklinkWriter.cpp:233
openshot::DecklinkWriter::IsOpen
bool IsOpen()
Determine if writer is open or closed.
Definition: DecklinkWriter.h:109
openshot::DecklinkWriter::Open
void Open()
Open device and video stream - which is called by the constructor automatically.
Definition: DecklinkWriter.cpp:60
openshot::DecklinkWriter::DecklinkWriter
DecklinkWriter(int device, int video_mode, int pixel_format, int channels, int sample_depth)
Definition: DecklinkWriter.cpp:35
openshot::ReaderBase
This abstract class is the base class, used by all readers in libopenshot.
Definition: ReaderBase.h:98
openshot::WriterBase
This abstract class is the base class, used by writers. Writers are types of classes that encode vide...
Definition: WriterBase.h:88
openshot
This namespace is the default namespace for all code in the openshot library.
Definition: AudioBufferSource.h:39