#include "decklink_capture.h"
+#include "defs.h"
#include <DeckLinkAPI.h>
#include <DeckLinkAPIConfiguration.h>
#include <DeckLinkAPIDiscovery.h>
#include <DeckLinkAPIModes.h>
+#include <DeckLinkAPITypes.h>
+#include <LinuxCOM.h>
#include <assert.h>
+#include <errno.h>
+#include <sched.h>
+#include <string>
#ifdef __SSE2__
#include <immintrin.h>
#endif
#include "shared/memcpy_interleaved.h"
#include "v210_converter.h"
-#define FRAME_SIZE (8 << 20) // 8 MB.
-
using namespace std;
using namespace std::chrono;
using namespace std::placeholders;
const int stride = video_frame->GetRowBytes();
const BMDPixelFormat format = video_frame->GetPixelFormat();
assert(format == pixel_format_to_bmd(current_pixel_format));
- if (global_flags.ten_bit_input) {
+ if (global_flags.bit_depth > 8) {
assert(stride == int(v210Converter::get_v210_stride(width)));
} else {
assert(stride == width * 2);
if (current_audio_frame.data != nullptr) {
const uint8_t *src;
audio_frame->GetBytes((void **)&src);
- current_audio_frame.len = sizeof(int32_t) * 2 * num_samples;
+ current_audio_frame.len = sizeof(int32_t) * 8 * num_samples;
memcpy(current_audio_frame.data, src, current_audio_frame.len);
audio_format.bits_per_sample = 32;
- audio_format.num_channels = 2;
+ audio_format.num_channels = 8;
}
}
fprintf(stderr, "Failed to set video mode 0x%04x for card %d\n", current_video_mode, card_index);
abort();
}
- if (input->EnableAudioInput(48000, bmdAudioSampleType32bitInteger, 2) != S_OK) {
+ if (input->EnableAudioInput(48000, bmdAudioSampleType32bitInteger, 8) != S_OK) {
fprintf(stderr, "Failed to enable audio input for card %d\n", card_index);
abort();
}
fprintf(stderr, "StopStreams failed with error 0x%x\n", result);
abort();
}
- if (input->DisableVideoInput() != S_OK) {
- fprintf(stderr, "Failed to disable video input for card %d\n", card_index);
- exit(1);
- }
- if (input->DisableAudioInput() != S_OK) {
- fprintf(stderr, "Failed to disable audio input for card %d\n", card_index);
- exit(1);
- }
+
+ // We could call DisableVideoInput() and DisableAudioInput() here,
+ // but they seem to be taking a really long time, and we only do this
+ // during shutdown anyway (except when switching to output mode,
+ // where DeckLinkOutput does the disabling), so StopStreams() will suffice.
+
running = false;
}