mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-22 16:26:39 +00:00
deinterlace: Fix greedyh crash for alternate-field interlacing
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2645 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5172>
This commit is contained in:
parent
9d89bad731
commit
6145a5c7cb
1 changed files with 18 additions and 9 deletions
|
@ -725,26 +725,35 @@ deinterlace_frame_di_greedyh_plane (GstDeinterlaceMethodGreedyH * self,
|
|||
guint8 *Dest = GST_VIDEO_FRAME_COMP_DATA (outframe, plane);
|
||||
gint RowStride = GST_VIDEO_FRAME_COMP_STRIDE (outframe, plane);
|
||||
gint FieldHeight = GST_VIDEO_FRAME_COMP_HEIGHT (outframe, plane) / 2;
|
||||
gint Pitch = RowStride * 2;
|
||||
gint Pitch;
|
||||
const guint8 *L1; // ptr to Line1, of 3
|
||||
const guint8 *L2; // ptr to Line2, the weave line
|
||||
const guint8 *L3; // ptr to Line3
|
||||
const guint8 *L2P; // ptr to prev Line2
|
||||
gint InfoIsOdd;
|
||||
gint Line;
|
||||
const GstVideoFrame *frame;
|
||||
|
||||
L1 = GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx].frame, plane);
|
||||
if (history[cur_field_idx].flags & PICTURE_INTERLACED_BOTTOM)
|
||||
L1 += RowStride;
|
||||
frame = history[cur_field_idx].frame;
|
||||
|
||||
L1 = GST_VIDEO_FRAME_COMP_DATA (frame, plane);
|
||||
L2 = GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx + 1].frame, plane);
|
||||
if (history[cur_field_idx + 1].flags & PICTURE_INTERLACED_BOTTOM)
|
||||
L2 += RowStride;
|
||||
L2P = GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx - 1].frame, plane);
|
||||
|
||||
if (GST_VIDEO_INFO_INTERLACE_MODE (&frame->info) ==
|
||||
GST_VIDEO_INTERLACE_MODE_ALTERNATE) {
|
||||
Pitch = RowStride;
|
||||
} else {
|
||||
Pitch = RowStride * 2;
|
||||
if (history[cur_field_idx].flags & PICTURE_INTERLACED_BOTTOM)
|
||||
L1 += RowStride;
|
||||
if (history[cur_field_idx + 1].flags & PICTURE_INTERLACED_BOTTOM)
|
||||
L2 += RowStride;
|
||||
if (history[cur_field_idx - 1].flags & PICTURE_INTERLACED_BOTTOM)
|
||||
L2P += RowStride;
|
||||
}
|
||||
|
||||
L3 = L1 + Pitch;
|
||||
L2P = GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx - 1].frame, plane);
|
||||
if (history[cur_field_idx - 1].flags & PICTURE_INTERLACED_BOTTOM)
|
||||
L2P += RowStride;
|
||||
|
||||
// copy first even line no matter what, and the first odd line if we're
|
||||
// processing an EVEN field. (note diff from other deint rtns.)
|
||||
|
|
Loading…
Reference in a new issue