[FFmpeg-devel] [PATCH] avcodec/imgconvert: Support non-planar colorspaces while padding

Michael Niedermayer michaelni at gmx.at
Sat Sep 19 18:37:00 CEST 2015


On Sat, Sep 19, 2015 at 12:33:55PM +0200, Przemysław Sobala wrote:
> W dniu 19.09.2015 o 04:14, Michael Niedermayer pisze:
> >On Fri, Sep 18, 2015 at 04:31:16PM +0200, Przemysław Sobala wrote:
> >>---
> >>  libavcodec/imgconvert.c | 99 ++++++++++++++++++++++++++++++++-----------------
> >>  1 file changed, 65 insertions(+), 34 deletions(-)
> >>
> >>diff --git a/libavcodec/imgconvert.c b/libavcodec/imgconvert.c
> >>index dc67560..a523bd5 100644
> >>--- a/libavcodec/imgconvert.c
> >>+++ b/libavcodec/imgconvert.c
> >>@@ -236,54 +236,85 @@ int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width,
> >>      int x_shift;
> >>      int yheight;
> >>      int i, y;
> >>+    int max_step[4];
> >>
> >>-    if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB ||
> >>-        !is_yuv_planar(desc)) return -1;
> >>+    if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB)
> >>+        return -1;
> >>
> >>-    for (i = 0; i < 3; i++) {
> >>-        x_shift = i ? desc->log2_chroma_w : 0;
> >>-        y_shift = i ? desc->log2_chroma_h : 0;
> >>+    if (is_yuv_planar(desc)) {
> >>+        for (i = 0; i < 3; i++) {
> >>+            x_shift = i ? desc->log2_chroma_w : 0;
> >>+            y_shift = i ? desc->log2_chroma_h : 0;
> >>
> >>-        if (padtop || padleft) {
> >>-            memset(dst->data[i], color[i],
> >>-                dst->linesize[i] * (padtop >> y_shift) + (padleft >> x_shift));
> >>-        }
> >>+            if (padtop || padleft) {
> >>+                memset(dst->data[i], color[i],
> >>+                    dst->linesize[i] * (padtop >> y_shift) + (padleft >> x_shift));
> >>+            }
> >>
> >>-        if (padleft || padright) {
> >>-            optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) +
> >>-                (dst->linesize[i] - (padright >> x_shift));
> >>-            yheight = (height - 1 - (padtop + padbottom)) >> y_shift;
> >>-            for (y = 0; y < yheight; y++) {
> >>-                memset(optr, color[i], (padleft + padright) >> x_shift);
> >>-                optr += dst->linesize[i];
> >>+            if (padleft || padright) {
> >>+                optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) +
> >>+                    (dst->linesize[i] - (padright >> x_shift));
> >>+                yheight = (height - 1 - (padtop + padbottom)) >> y_shift;
> >>+                for (y = 0; y < yheight; y++) {
> >>+                    memset(optr, color[i], (padleft + padright) >> x_shift);
> >>+                    optr += dst->linesize[i];
> >>+                }
> >>              }
> >>+
> >>+            if (src) { /* first line */
> >>+                uint8_t *iptr = src->data[i];
> >>+                optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) +
> >>+                        (padleft >> x_shift);
> >>+                memcpy(optr, iptr, (width - padleft - padright) >> x_shift);
> >>+                iptr += src->linesize[i];
> >>+                optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) +
> >>+                    (dst->linesize[i] - (padright >> x_shift));
> >>+                yheight = (height - 1 - (padtop + padbottom)) >> y_shift;
> >>+                for (y = 0; y < yheight; y++) {
> >>+                    memset(optr, color[i], (padleft + padright) >> x_shift);
> >>+                    memcpy(optr + ((padleft + padright) >> x_shift), iptr,
> >>+                           (width - padleft - padright) >> x_shift);
> >>+                    iptr += src->linesize[i];
> >>+                    optr += dst->linesize[i];
> >>+                }
> >>+            }
> >>+
> >>+            if (padbottom || padright) {
> >>+                optr = dst->data[i] + dst->linesize[i] *
> >>+                    ((height - padbottom) >> y_shift) - (padright >> x_shift);
> >>+                memset(optr, color[i],dst->linesize[i] *
> >>+                    (padbottom >> y_shift) + (padright >> x_shift));
> >>+            }
> >>+        }
> >
> >this only reindents the code, moving the reindention to a seperate
> >patch would make it more readable
> 
> I've rearranged the code a bit.
> 
> >>+    } else {
> >
> >>+        if (src)
> >>+            return -1;
> >
> >why ?
> >
> 
> Because it's not yet implemented.
> I've added a comment.
> New patch attached.
> 
> --
> Regards
> Przemysław Sobala
> 
> 
> Główne Spółki Grupy Wirtualna Polska:
> 
> Wirtualna Polska Holding Spółka Akcyjna z siedzibą w Warszawie, ul. Jutrzenki 137A, 02-231 Warszawa, wpisana do Krajowego Rejestru Sądowego - Rejestru Przedsiębiorców prowadzonego przez Sąd Rejonowy dla m.st. Warszawy w Warszawie pod nr KRS: 0000407130, kapitał zakładowy: 1 245 651,90 zł (w całości wpłacony), Numer Identyfikacji Podatkowej (NIP): 521-31-11-513
> 
> Grupa Wirtualna Polska Spółka z ograniczoną odpowiedzialnością z siedzibą w Warszawie, ul. Jutrzenki 137A, 02-231 Warszawa, wpisana do Krajowego Rejestru Sądowego - Rejestru Przedsiębiorców prowadzonego przez Sąd Rejonowy dla m.st. Warszawy w Warszawie pod nr KRS: 0000373814, kapitał zakładowy: 317 957 800,00 zł, Numer Identyfikacji Podatkowej (NIP): 527-26-45-593
> 
> WP Shopping Spółka z ograniczoną odpowiedzialnością z siedzibą w Gdańsku, ul. Romualda Traugutta 115 C, 80-226 Gdańsk, wpisana do Krajowego Rejestru Sądowego - Rejestru Przedsiębiorców prowadzonego przez Sąd Rejonowy Gdańsk - Północ w Gdańsku pod nr KRS: 0000546914, kapitał zakładowy: 170.000,00 złotych (w całości wpłacony), Numer Identyfikacji Podatkowej (NIP): 957-07-51-216

>  imgconvert.c |   37 +++++++++++++++++++++++++++++++++++--
>  1 file changed, 35 insertions(+), 2 deletions(-)
> 7a65e7221fe950c34142c3d63dba81c10bce278c  0001-avcodec-imgconvert-Support-non-planar-colorspaces-wh.patch
> From fe5215e57e8c111706713d5a2eb9b75db6073e8c Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Przemys=C5=82aw=20Sobala?= <przemyslaw.sobala at grupawp.pl>
> Date: Fri, 18 Sep 2015 15:40:58 +0200
> Subject: [PATCH] avcodec/imgconvert: Support non-planar colorspaces while
>  padding

applied

thanks

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

When the tyrant has disposed of foreign enemies by conquest or treaty, and
there is nothing more to fear from them, then he is always stirring up
some war or other, in order that the people may require a leader. -- Plato
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20150919/e3658b66/attachment.sig>


More information about the ffmpeg-devel mailing list