mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-15 05:49:49 +00:00
winegstreamer: Add format field to wmv wg_format.
Wrong plugins will be selected for WMV decoder if we don't set format field.
This commit is contained in:
parent
7bc693eef5
commit
93716f5a21
|
@ -763,11 +763,17 @@ static bool amt_to_wg_format_video_wmv(const AM_MEDIA_TYPE *mt, struct wg_format
|
|||
format->u.video_wmv.fps_d = video_format->AvgTimePerFrame;
|
||||
|
||||
if (IsEqualGUID(&mt->subtype, &MEDIASUBTYPE_WMV1))
|
||||
format->u.video_wmv.version = 1;
|
||||
format->u.video_wmv.format = WG_WMV_VIDEO_FORMAT_WMV1;
|
||||
else if (IsEqualGUID(&mt->subtype, &MEDIASUBTYPE_WMV2))
|
||||
format->u.video_wmv.version = 2;
|
||||
format->u.video_wmv.format = WG_WMV_VIDEO_FORMAT_WMV2;
|
||||
else if (IsEqualGUID(&mt->subtype, &MEDIASUBTYPE_WMV3))
|
||||
format->u.video_wmv.format = WG_WMV_VIDEO_FORMAT_WMV3;
|
||||
else if (IsEqualGUID(&mt->subtype, &MEDIASUBTYPE_WMVA))
|
||||
format->u.video_wmv.format = WG_WMV_VIDEO_FORMAT_WMVA;
|
||||
else if (IsEqualGUID(&mt->subtype, &MEDIASUBTYPE_WVC1))
|
||||
format->u.video_wmv.format = WG_WMV_VIDEO_FORMAT_WVC1;
|
||||
else
|
||||
format->u.video_wmv.version = 3;
|
||||
format->u.video_wmv.format = WG_WMV_VIDEO_FORMAT_UNKNOWN;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -130,9 +130,17 @@ struct wg_format
|
|||
} video_h264;
|
||||
struct
|
||||
{
|
||||
enum wg_wmv_video_format
|
||||
{
|
||||
WG_WMV_VIDEO_FORMAT_UNKNOWN,
|
||||
WG_WMV_VIDEO_FORMAT_WMV1,
|
||||
WG_WMV_VIDEO_FORMAT_WMV2,
|
||||
WG_WMV_VIDEO_FORMAT_WMV3,
|
||||
WG_WMV_VIDEO_FORMAT_WMVA,
|
||||
WG_WMV_VIDEO_FORMAT_WVC1,
|
||||
} format;
|
||||
int32_t width, height;
|
||||
uint32_t fps_n, fps_d;
|
||||
uint32_t version;
|
||||
} video_wmv;
|
||||
struct
|
||||
{
|
||||
|
|
|
@ -556,19 +556,54 @@ static GstCaps *wg_format_to_caps_video_h264(const struct wg_format *format)
|
|||
|
||||
static GstCaps *wg_format_to_caps_video_wmv(const struct wg_format *format)
|
||||
{
|
||||
unsigned int wmv_version;
|
||||
const char *wmv_format;
|
||||
GstCaps *caps;
|
||||
|
||||
if (!(caps = gst_caps_new_empty_simple("video/x-wmv")))
|
||||
return NULL;
|
||||
|
||||
switch (format->u.video_wmv.format)
|
||||
{
|
||||
case WG_WMV_VIDEO_FORMAT_WMV1:
|
||||
wmv_format = "WMV1";
|
||||
wmv_version = 1;
|
||||
break;
|
||||
case WG_WMV_VIDEO_FORMAT_WMV2:
|
||||
wmv_format = "WMV2";
|
||||
wmv_version = 2;
|
||||
break;
|
||||
case WG_WMV_VIDEO_FORMAT_WMV3:
|
||||
wmv_format = "WMV3";
|
||||
wmv_version = 3;
|
||||
break;
|
||||
case WG_WMV_VIDEO_FORMAT_WMVA:
|
||||
wmv_format = "WMVA";
|
||||
wmv_version = 3;
|
||||
break;
|
||||
case WG_WMV_VIDEO_FORMAT_WVC1:
|
||||
wmv_format = "WVC1";
|
||||
wmv_version = 3;
|
||||
break;
|
||||
default:
|
||||
GST_WARNING("Unknown WMV format %u.", format->u.video_wmv.format);
|
||||
/* fallthrough */
|
||||
case WG_WMV_VIDEO_FORMAT_UNKNOWN:
|
||||
wmv_format = NULL;
|
||||
wmv_version = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (wmv_format)
|
||||
gst_caps_set_simple(caps, "format", G_TYPE_STRING, wmv_format, NULL);
|
||||
if (wmv_version)
|
||||
gst_caps_set_simple(caps, "wmvversion", G_TYPE_INT, wmv_version, NULL);
|
||||
if (format->u.video_wmv.width)
|
||||
gst_caps_set_simple(caps, "width", G_TYPE_INT, format->u.video_wmv.width, NULL);
|
||||
if (format->u.video_wmv.height)
|
||||
gst_caps_set_simple(caps, "height", G_TYPE_INT, format->u.video_wmv.height, NULL);
|
||||
if (format->u.video_wmv.fps_d || format->u.video_wmv.fps_n)
|
||||
gst_caps_set_simple(caps, "framerate", GST_TYPE_FRACTION, format->u.video_wmv.fps_n, format->u.video_wmv.fps_d, NULL);
|
||||
if (format->u.video_wmv.version)
|
||||
gst_caps_set_simple(caps, "wmvversion", G_TYPE_INT, format->u.video_wmv.version, NULL);
|
||||
|
||||
return caps;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue