[FFmpeg-devel] [PATCH 3/5] Renamed reinterlace to tinterlace

Vasile Toncu vasile.toncu at tremend.com
Thu Aug 16 14:56:50 EEST 2018


Hi,

Thank you for the additional testing effort.
Fixed the issue.

On Tue, Aug 14, 2018 at 10:25 PM, Thomas Mundt <tmundt75 at gmail.com> wrote:

> Hi,
>
> 2018-08-14 18:53 GMT+02:00 Vasile Toncu <vasile.toncu at tremend.com>:
>
> > Hi Thomas,
> >
> > I added the log messages.
> >
> > Thanks for the review.
> >
>
> I found some more time for testing this evening. Unfortunately there are
> still issues.
> I get half green pictures with some modes at high bit depth.
> But the fix is easy.
> The bytewidth in all av_image_copy_plane functions need to be adapted for
> high bit depths.
>
> {....}
> >     const AVPixFmtDescriptor *fmt_desc = av_pix_fmt_desc_get(out->
> format);
> >     int mult = (fmt_desc->comp[0].depth > 8 ? 2 : 1);
> >
>
> You used the calculated "mult" in the av_image_copy_plane functions of
> MODE_MERGE and MODE_PAD only.
> And forgot the others:
>
>
> > {....}
> >
> +    case MODE_INTERLEAVE_BOTTOM:
> > +    case MODE_INTERLEAVE_TOP:
> > +        y = y * 2;
> > +
> > +        if (tinterlace->flags & FLAG_VLPF || tinterlace->flags &
> > FLAG_CVLPF) {
> > +            int clip_max = (1 << fmt_desc->comp[plane].depth) - 1;
> > +
> > +            interleave_filter_frame(tinterlace, first, out, plane,
> > !!(tinterlace->flags & FLAG_CVLPF), tinterlace_mode ==
> MODE_INTERLEAVE_TOP,
> > x, y, clip_max);
> > +            interleave_filter_frame(tinterlace, second, out, plane,
> > !!(tinterlace->flags & FLAG_CVLPF), tinterlace_mode ==
> > MODE_INTERLEAVE_BOTTOM, x, y, clip_max);
> >          } else {
> > -            if (tinterlace->csp->comp[plane].depth > 8)
> > -                cols *= 2;
> > -            av_image_copy_plane(dstp, dstp_linesize, srcp,
> srcp_linesize,
> > cols, lines);
> > +            offset1 = (tinterlace_mode == MODE_INTERLEAVE_TOP) ? 0 :
> > out->linesize[plane];
> > +            offset2 = (tinterlace_mode == MODE_INTERLEAVE_TOP) ? 0 :
> > first->linesize[plane];
> > +            offset3 = (tinterlace_mode == MODE_INTERLEAVE_TOP) ?
> > out->linesize[plane]    : 0;
> > +            offset4 = (tinterlace_mode == MODE_INTERLEAVE_TOP) ?
> > second->linesize[plane] : 0;
> > +
> > +            av_image_copy_plane(out->data[plane] + offset1, 2 *
> > out->linesize[plane],
> > +                first->data[plane] + offset2, 2 *
> first->linesize[plane],
> > +                first->width / x, first->height / y);
> > +            av_image_copy_plane(out->data[plane] + offset3, 2 *
> > out->linesize[plane],
> > +                second->data[plane] + offset4, 2 *
> > second->linesize[plane],
> > +                second->width / x, second->height / y);
> >
>
> Here
>
>          }
> > +        break;
> > +
> > +    case MODE_INTERLACE_X2:
> > +        y = y * 2;
> > +
> > +        offset1 = 0; offset2 = 0;
> > +        offset3 = out->linesize[plane];
> > +        offset4 = second->linesize[plane];
> > +
> > +        if (second->interlaced_frame && second->top_field_first) {
> > +            offset1 = out->linesize[plane];
> > +            offset2 = first->linesize[plane];
> > +            offset3 = 0; offset4 = 0;
> > +        }
> > +
> > +        av_image_copy_plane(out->data[plane] + offset1, 2 *
> > out->linesize[plane],
> > +            first->data[plane] + offset2, 2 * first->linesize[plane],
> > +            first->width / x, first->height / y);
> > +        av_image_copy_plane(out->data[plane] + offset3, 2 *
> > out->linesize[plane],
> > +            second->data[plane] + offset4, 2 * second->linesize[plane],
> > +            second->width / x, second->height / y);
> >
>
>  Here
>
> +        break;
> > +
> > +    case MODE_MERGE_X2:
> > +        if (IS_ODD(tinterlace->current_frame_index - 1)) {
> > +            av_image_copy_plane(out->data[plane], 2 *
> > out->linesize[plane],
> > +                second->data[plane], second->linesize[plane],
> > second->width / x, second->height / y);
> > +            av_image_copy_plane(out->data[plane] +
> out->linesize[plane],
> > 2 * out->linesize[plane],
> > +                first->data[plane], first->linesize[plane], first->width
> > / x, first->height / y);
> > +        } else {
> > +            av_image_copy_plane(out->data[plane], 2 *
> > out->linesize[plane],
> > +                first->data[plane], first->linesize[plane], first->width
> > / x, first->height / y);
> > +            av_image_copy_plane(out->data[plane] +
> out->linesize[plane],
> > 2 * out->linesize[plane],
> > +                second->data[plane], second->linesize[plane],
> > second->width / x, second->height / y);
> >
>
> Here.
>
> Sorry for the piecemeal.
>
> Regards,
> Thomas
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Patch-3-Move-reinterlace-to-tinterlace.patch
Type: text/x-patch
Size: 90034 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20180816/d2af194f/attachment.bin>


More information about the ffmpeg-devel mailing list