\r
std::array<blue_dma_buffer_ptr, 3> reserved_frames_; \r
\r
- const bool embed_audio_;\r
+ const bool embedded_audio_;\r
\r
executor executor_;\r
public:\r
- implementation::implementation(unsigned int device_index, bool embed_audio) \r
+ implementation::implementation(unsigned int device_index, bool embedded_audio) \r
: model_name_(L"BLUEFISH")\r
, device_index_(device_index) \r
, mem_fmt_(MEM_FMT_ARGB_PC)\r
, vid_fmt_(VID_FMT_INVALID) \r
, res_fmt_(RES_FMT_NORMAL) \r
, engine_mode_(VIDEO_ENGINE_FRAMESTORE) \r
- , embed_audio_(embed_audio)\r
+ , embedded_audio_(embedded_audio)\r
, executor_(print())\r
{\r
- if(!BlueVelvetFactory4 || (embed_audio_ && (!encode_hanc_frame || !encode_hanc_frame)))\r
+ if(!BlueVelvetFactory4 || (embedded_audio_ && (!encode_hanc_frame || !encode_hanc_frame)))\r
BOOST_THROW_EXCEPTION(bluefish_exception() << msg_info("Bluefish drivers not found."));\r
}\r
\r
if(BLUE_FAIL(set_card_property(blue_, VIDEO_PREDEFINED_COLOR_MATRIX, vid_fmt_ == VID_FMT_PAL ? MATRIX_601_CGR : MATRIX_709_CGR)))\r
CASPAR_LOG(warning) << print() << TEXT(" Failed to set colormatrix to ") << (vid_fmt_ == VID_FMT_PAL ? TEXT("601 CGR") : TEXT("709 CGR")) << TEXT(".");\r
\r
- if(!embed_audio_)\r
+ if(!embedded_audio_)\r
{\r
if(BLUE_FAIL(set_card_property(blue_, EMBEDEDDED_AUDIO_OUTPUT, 0))) \r
CASPAR_LOG(warning) << TEXT("BLUECARD ERROR: Failed to disable embedded audio."); \r
{\r
fast_memcpy(reserved_frames_.front()->image_data(), frame->image_data().begin(), frame->image_data().size());\r
\r
- if(embed_audio_)\r
+ if(embedded_audio_)\r
{ \r
auto frame_audio_data = frame->audio_data().empty() ? silence.data() : const_cast<short*>(frame->audio_data().begin());\r
\r
}\r
};\r
\r
-bluefish_consumer::bluefish_consumer(unsigned int device_index, bool embed_audio) : impl_(new implementation(device_index, embed_audio)){} \r
+bluefish_consumer::bluefish_consumer(unsigned int device_index, bool embedded_audio) : impl_(new implementation(device_index, embedded_audio)){} \r
bluefish_consumer::bluefish_consumer(bluefish_consumer&& other) : impl_(std::move(other.impl_)){}\r
void bluefish_consumer::initialize(const core::video_format_desc& format_desc)\r
{\r
// TODO: Ugly\r
- impl_.reset(new implementation(impl_->device_index_, impl_->embed_audio_));\r
+ impl_.reset(new implementation(impl_->device_index_, impl_->embedded_audio_));\r
impl_->initialize(format_desc);\r
}\r
void bluefish_consumer::send(const safe_ptr<const core::read_frame>& frame){impl_->send(frame);}\r
return core::frame_consumer::empty();\r
\r
int device_index = 1;\r
- bool embed_audio = false;\r
-\r
if(params.size() > 1)\r
- device_index = lexical_cast_or_default<int>(params[2]);\r
+ device_index = lexical_cast_or_default<int>(params[1], 1);\r
\r
- if(params.size() > 2) \r
- embed_audio = lexical_cast_or_default<bool>(params[3]);\r
+ bool embedded_audio = std::find(params.begin(), params.end(), L"EMBEDDED_AUDIO") != params.end();\r
\r
- return make_safe<bluefish_consumer>(device_index, embed_audio);\r
+ return make_safe<bluefish_consumer>(device_index, embedded_audio);\r
}\r
\r
}
\ No newline at end of file
: device_index(1)\r
, embedded_audio(false)\r
, keyer(default_key)\r
- , latency(default_latency)\r
- {}\r
- configuration(const boost::property_tree::ptree& ptree)\r
- : device_index(1)\r
- , embedded_audio(false)\r
- , keyer(default_key)\r
- , latency(default_latency)\r
- { \r
- auto key_str = ptree.get("key", "default");\r
- if(key_str == "internal")\r
- keyer = internal_key;\r
- else if(key_str == "external")\r
- keyer = external_key;\r
-\r
- auto latency_str = ptree.get("latency", "default");\r
- if(latency_str == "normal")\r
- latency = normal_latency;\r
- else if(latency_str == "low")\r
- latency = low_latency;\r
-\r
- device_index = ptree.get("device", 0);\r
- embedded_audio = ptree.get("embedded-audio", false);\r
- }\r
-\r
- configuration(const std::vector<std::wstring>& params)\r
- : device_index(1)\r
- , embedded_audio(false)\r
- , keyer(default_key)\r
- , latency(default_latency)\r
- {\r
- if(params.size() > 0)\r
- device_index = lexical_cast_or_default<int>(params[0], device_index);\r
-\r
- {\r
- auto it = std::find(params.begin(), params.end(), L"INTERNAL_KEY");\r
- if(it != params.end())\r
- keyer = internal_key;\r
- else\r
- {\r
- auto it = std::find(params.begin(), params.end(), L"EXTERNAL_KEY");\r
- if(it != params.end())\r
- keyer = external_key;\r
- }\r
- }\r
- \r
- embedded_audio = std::find(params.begin(), params.end(), L"EMBED_AUDIO") != params.end(); \r
- }\r
+ , latency(default_latency){}\r
};\r
\r
struct decklink_output : public IDeckLinkVideoOutputCallback, public IDeckLinkAudioOutputCallback, boost::noncopyable\r
if(params.size() < 1 || params[0] != L"DECKLINK")\r
return core::frame_consumer::empty();\r
\r
- return make_safe<decklink_consumer>(configuration(std::vector<std::wstring>(params.begin()+1, params.end())));\r
+ configuration config;\r
+ \r
+ if(params.size() > 1)\r
+ config.device_index = lexical_cast_or_default<int>(params[1], config.device_index);\r
+ \r
+ auto it = std::find(params.begin(), params.end(), L"INTERNAL_KEY");\r
+ if(it != params.end())\r
+ config.keyer = internal_key;\r
+ else\r
+ {\r
+ auto it = std::find(params.begin(), params.end(), L"EXTERNAL_KEY");\r
+ if(it != params.end())\r
+ config.keyer = external_key;\r
+ }\r
+ \r
+ config.embedded_audio = std::find(params.begin(), params.end(), L"EMBEDDED_AUDIO") != params.end();\r
+\r
+ return make_safe<decklink_consumer>(config);\r
}\r
\r
safe_ptr<core::frame_consumer> create_decklink_consumer_ptree(const boost::property_tree::ptree& ptree) \r
{\r
- return make_safe<decklink_consumer>(configuration(ptree));\r
+ configuration config;\r
+\r
+ auto key_str = ptree.get("key", "default");\r
+ if(key_str == "internal")\r
+ config.keyer = internal_key;\r
+ else if(key_str == "external")\r
+ config.keyer = external_key;\r
+\r
+ auto latency_str = ptree.get("latency", "default");\r
+ if(latency_str == "normal")\r
+ config.latency = normal_latency;\r
+ else if(latency_str == "low")\r
+ config.latency = low_latency;\r
+\r
+ config.device_index = ptree.get("device", 0);\r
+ config.embedded_audio = ptree.get("embedded-audio", false);\r
+\r
+ return make_safe<decklink_consumer>(config);\r
}\r
\r
}
\ No newline at end of file