mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-07-19 09:39:15 +00:00
win-dshow: Ignore FFmpeg colorspace if overridden
Verified MJPEG devices are no longer locked to Rec. 601.
This commit is contained in:
parent
3d87b3b948
commit
47f4c18a95
|
@ -312,7 +312,7 @@ convert_color_space(enum AVColorSpace s, enum AVColorTransferCharacteristic trc,
|
|||
}
|
||||
|
||||
bool ffmpeg_decode_video(struct ffmpeg_decode *decode, uint8_t *data,
|
||||
size_t size, long long *ts,
|
||||
size_t size, long long *ts, enum video_colorspace cs,
|
||||
enum video_range_type range,
|
||||
struct obs_source_frame2 *frame, bool *got_output)
|
||||
{
|
||||
|
@ -396,9 +396,11 @@ bool ffmpeg_decode_video(struct ffmpeg_decode *decode, uint8_t *data,
|
|||
: VIDEO_RANGE_PARTIAL;
|
||||
}
|
||||
|
||||
const enum video_colorspace cs = convert_color_space(
|
||||
decode->frame->colorspace, decode->frame->color_trc,
|
||||
decode->frame->color_primaries);
|
||||
if (cs == VIDEO_CS_DEFAULT) {
|
||||
cs = convert_color_space(decode->frame->colorspace,
|
||||
decode->frame->color_trc,
|
||||
decode->frame->color_primaries);
|
||||
}
|
||||
|
||||
const bool success = video_format_get_parameters_for_format(
|
||||
cs, range, format, frame->color_matrix, frame->color_range_min,
|
||||
|
|
|
@ -59,6 +59,7 @@ extern bool ffmpeg_decode_audio(struct ffmpeg_decode *decode, uint8_t *data,
|
|||
|
||||
extern bool ffmpeg_decode_video(struct ffmpeg_decode *decode, uint8_t *data,
|
||||
size_t size, long long *ts,
|
||||
enum video_colorspace cs,
|
||||
enum video_range_type range,
|
||||
struct obs_source_frame2 *frame,
|
||||
bool *got_output);
|
||||
|
|
|
@ -198,6 +198,7 @@ struct DShowInput {
|
|||
VideoConfig videoConfig;
|
||||
AudioConfig audioConfig;
|
||||
|
||||
enum video_colorspace cs;
|
||||
obs_source_frame2 frame;
|
||||
obs_source_audio audio;
|
||||
long lastRotation = 0;
|
||||
|
@ -505,7 +506,7 @@ void DShowInput::OnEncodedVideoData(enum AVCodecID id, unsigned char *data,
|
|||
}
|
||||
|
||||
bool got_output;
|
||||
bool success = ffmpeg_decode_video(video_decoder, data, size, &ts,
|
||||
bool success = ffmpeg_decode_video(video_decoder, data, size, &ts, cs,
|
||||
frame.range, &frame, &got_output);
|
||||
if (!success) {
|
||||
blog(LOG_WARNING, "Error decoding video");
|
||||
|
@ -1155,7 +1156,7 @@ inline bool DShowInput::Activate(obs_data_t *settings)
|
|||
if (device.Start() != Result::Success)
|
||||
return false;
|
||||
|
||||
const enum video_colorspace cs = GetColorSpace(settings);
|
||||
cs = GetColorSpace(settings);
|
||||
const enum video_range_type range = GetColorRange(settings);
|
||||
|
||||
enum video_trc trc = VIDEO_TRC_DEFAULT;
|
||||
|
|
Loading…
Reference in a new issue