Skip to content

Commit 47f4c18

Browse files
jpark37jp9000
authored andcommitted
win-dshow: Ignore FFmpeg colorspace if overridden
Verified MJPEG devices are no longer locked to Rec. 601.
1 parent 3d87b3b commit 47f4c18

File tree

3 files changed

+10
-6
lines changed

3 files changed

+10
-6
lines changed

plugins/win-dshow/ffmpeg-decode.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ convert_color_space(enum AVColorSpace s, enum AVColorTransferCharacteristic trc,
312312
}
313313

314314
bool ffmpeg_decode_video(struct ffmpeg_decode *decode, uint8_t *data,
315-
size_t size, long long *ts,
315+
size_t size, long long *ts, enum video_colorspace cs,
316316
enum video_range_type range,
317317
struct obs_source_frame2 *frame, bool *got_output)
318318
{
@@ -396,9 +396,11 @@ bool ffmpeg_decode_video(struct ffmpeg_decode *decode, uint8_t *data,
396396
: VIDEO_RANGE_PARTIAL;
397397
}
398398

399-
const enum video_colorspace cs = convert_color_space(
400-
decode->frame->colorspace, decode->frame->color_trc,
401-
decode->frame->color_primaries);
399+
if (cs == VIDEO_CS_DEFAULT) {
400+
cs = convert_color_space(decode->frame->colorspace,
401+
decode->frame->color_trc,
402+
decode->frame->color_primaries);
403+
}
402404

403405
const bool success = video_format_get_parameters_for_format(
404406
cs, range, format, frame->color_matrix, frame->color_range_min,

plugins/win-dshow/ffmpeg-decode.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ extern bool ffmpeg_decode_audio(struct ffmpeg_decode *decode, uint8_t *data,
5959

6060
extern bool ffmpeg_decode_video(struct ffmpeg_decode *decode, uint8_t *data,
6161
size_t size, long long *ts,
62+
enum video_colorspace cs,
6263
enum video_range_type range,
6364
struct obs_source_frame2 *frame,
6465
bool *got_output);

plugins/win-dshow/win-dshow.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ struct DShowInput {
198198
VideoConfig videoConfig;
199199
AudioConfig audioConfig;
200200

201+
enum video_colorspace cs;
201202
obs_source_frame2 frame;
202203
obs_source_audio audio;
203204
long lastRotation = 0;
@@ -505,7 +506,7 @@ void DShowInput::OnEncodedVideoData(enum AVCodecID id, unsigned char *data,
505506
}
506507

507508
bool got_output;
508-
bool success = ffmpeg_decode_video(video_decoder, data, size, &ts,
509+
bool success = ffmpeg_decode_video(video_decoder, data, size, &ts, cs,
509510
frame.range, &frame, &got_output);
510511
if (!success) {
511512
blog(LOG_WARNING, "Error decoding video");
@@ -1155,7 +1156,7 @@ inline bool DShowInput::Activate(obs_data_t *settings)
11551156
if (device.Start() != Result::Success)
11561157
return false;
11571158

1158-
const enum video_colorspace cs = GetColorSpace(settings);
1159+
cs = GetColorSpace(settings);
11591160
const enum video_range_type range = GetColorRange(settings);
11601161

11611162
enum video_trc trc = VIDEO_TRC_DEFAULT;

0 commit comments

Comments
 (0)