obs-qsv11: Fix QSV rescaling

When using per-encoder rescaling, QSV would overwrite the current
encoder scale value in the get_video_info callback with the base video
width/height instead of using the current encoder width/height.
master
jp9000 2016-04-28 16:01:38 -07:00
parent 65fcd20242
commit 61ab648bac
1 changed files with 9 additions and 9 deletions

View File

@ -533,20 +533,22 @@ static inline bool valid_format(enum video_format format)
return format == VIDEO_FORMAT_NV12;
}
static inline void cap_resolution(struct video_scale_info *info,
const struct video_output_info *vid_info)
static inline void cap_resolution(obs_encoder_t *encoder,
struct video_scale_info *info)
{
enum qsv_cpu_platform qsv_platform = qsv_get_cpu_platform();
uint32_t width = obs_encoder_get_width(encoder);
uint32_t height = obs_encoder_get_height(encoder);
info->height = vid_info->height;
info->width = vid_info->width;
info->height = height;
info->width = width;
if (qsv_platform <= QSV_CPU_PLATFORM_IVB) {
if (vid_info->width > 1920) {
if (width > 1920) {
info->width = 1920;
}
if (vid_info->height > 1200) {
if (height > 1200) {
info->height = 1200;
}
}
@ -555,8 +557,6 @@ static inline void cap_resolution(struct video_scale_info *info,
static void obs_qsv_video_info(void *data, struct video_scale_info *info)
{
struct obs_qsv *obsqsv = data;
video_t *video = obs_encoder_video(obsqsv->encoder);
const struct video_output_info *vid_info = video_output_get_info(video);
enum video_format pref_format;
pref_format = obs_encoder_get_preferred_video_format(obsqsv->encoder);
@ -567,7 +567,7 @@ static void obs_qsv_video_info(void *data, struct video_scale_info *info)
}
info->format = pref_format;
cap_resolution(info, vid_info);
cap_resolution(obsqsv->encoder, info);
}
static void parse_packet(struct obs_qsv *obsqsv, struct encoder_packet *packet, mfxBitstream *pBS, uint32_t fps_num, bool *received_packet)