mirror of https://github.com/mpv-player/mpv
options: add --deinterlace-field-parity option
Previously there was no way to specify the field order of interlaced videos when deinterlacing with inbuilt filters. Lavfi deinterlacers seemed to prefer top field order while inbuilt ones (vdpaupp, vavpp, d3d11vpp) seemed to prefer bottom field order. The default "auto" option should work exactly as before while specifying either "tff" or "bff" should force the specified field order
This commit is contained in:
parent
c1029aaa82
commit
38a8e9bcba
|
@ -28,6 +28,7 @@ Interface changes
|
||||||
|
|
||||||
--- mpv 0.38.0 ---
|
--- mpv 0.38.0 ---
|
||||||
- add `begin-vo-dragging` command
|
- add `begin-vo-dragging` command
|
||||||
|
- add `--deinterlace-field-parity` option
|
||||||
- add `--volume-gain`, `--volume-gain-min`, and `--volume-gain-max` options
|
- add `--volume-gain`, `--volume-gain-min`, and `--volume-gain-max` options
|
||||||
- add `current-gpu-context` property
|
- add `current-gpu-context` property
|
||||||
- add `--secondary-sub-ass-override` option
|
- add `--secondary-sub-ass-override` option
|
||||||
|
|
|
@ -1676,6 +1676,17 @@ Video
|
||||||
inserted deinterlacing filters, and that this will make video look worse if
|
inserted deinterlacing filters, and that this will make video look worse if
|
||||||
it's not actually interlaced.
|
it's not actually interlaced.
|
||||||
|
|
||||||
|
``--deinterlace-field-parity=<tff|bff|auto>``
|
||||||
|
Specify the field parity/order when deinterlacing(default: auto)
|
||||||
|
Each frame of an interlaced video is divided into two fields, which are
|
||||||
|
then separately transmitted. Top field represents even lines while bottom
|
||||||
|
field represents odd lines. When deinterlacing the deinterlacer needs to
|
||||||
|
know the correct temporal order of the fields else the video will appear
|
||||||
|
jittery.
|
||||||
|
|
||||||
|
``auto`` will automatically try to detect the field order of the video,
|
||||||
|
``tff`` forces top field first while ``bff`` forces bottom field first.
|
||||||
|
|
||||||
``--frames=<number>``
|
``--frames=<number>``
|
||||||
Play/convert only first ``<number>`` video frames, then quit.
|
Play/convert only first ``<number>`` video frames, then quit.
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,7 @@
|
||||||
#include "input/event.h"
|
#include "input/event.h"
|
||||||
#include "stream/stream.h"
|
#include "stream/stream.h"
|
||||||
#include "video/csputils.h"
|
#include "video/csputils.h"
|
||||||
|
#include "video/filter/refqueue.h"
|
||||||
#include "video/hwdec.h"
|
#include "video/hwdec.h"
|
||||||
#include "video/image_writer.h"
|
#include "video/image_writer.h"
|
||||||
#include "sub/osd.h"
|
#include "sub/osd.h"
|
||||||
|
@ -440,9 +441,16 @@ const struct m_sub_options filter_conf = {
|
||||||
.opts = (const struct m_option[]){
|
.opts = (const struct m_option[]){
|
||||||
{"deinterlace", OPT_CHOICE(deinterlace,
|
{"deinterlace", OPT_CHOICE(deinterlace,
|
||||||
{"no", 0}, {"yes", 1}, {"auto", -1})},
|
{"no", 0}, {"yes", 1}, {"auto", -1})},
|
||||||
|
{"deinterlace-field-parity", OPT_CHOICE(field_parity,
|
||||||
|
{"tff", MP_FIELD_PARITY_TFF},
|
||||||
|
{"bff", MP_FIELD_PARITY_BFF},
|
||||||
|
{"auto", MP_FIELD_PARITY_AUTO})},
|
||||||
{0}
|
{0}
|
||||||
},
|
},
|
||||||
.size = sizeof(OPT_BASE_STRUCT),
|
.size = sizeof(OPT_BASE_STRUCT),
|
||||||
|
.defaults = &(const struct filter_opts){
|
||||||
|
.field_parity = MP_FIELD_PARITY_AUTO,
|
||||||
|
},
|
||||||
.change_flags = UPDATE_IMGPAR,
|
.change_flags = UPDATE_IMGPAR,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -399,6 +399,7 @@ struct dvd_opts {
|
||||||
|
|
||||||
struct filter_opts {
|
struct filter_opts {
|
||||||
int deinterlace;
|
int deinterlace;
|
||||||
|
int field_parity;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const struct m_sub_options vo_sub_opts;
|
extern const struct m_sub_options vo_sub_opts;
|
||||||
|
|
|
@ -29,6 +29,10 @@ enum {
|
||||||
MP_MODE_INTERLACED_ONLY = (1 << 2), // only deinterlace marked frames
|
MP_MODE_INTERLACED_ONLY = (1 << 2), // only deinterlace marked frames
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define MP_FIELD_PARITY_AUTO -1
|
||||||
|
#define MP_FIELD_PARITY_TFF 0
|
||||||
|
#define MP_FIELD_PARITY_BFF 1
|
||||||
|
|
||||||
void mp_refqueue_set_mode(struct mp_refqueue *q, int flags);
|
void mp_refqueue_set_mode(struct mp_refqueue *q, int flags);
|
||||||
bool mp_refqueue_should_deint(struct mp_refqueue *q);
|
bool mp_refqueue_should_deint(struct mp_refqueue *q);
|
||||||
bool mp_refqueue_is_top_field(struct mp_refqueue *q);
|
bool mp_refqueue_is_top_field(struct mp_refqueue *q);
|
||||||
|
|
Loading…
Reference in New Issue