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
>From fe5215e57e8c111706713d5a2eb9b75db6073e8c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Przemys=C5=82aw=20Sobala?= <przemyslaw.sob...@grupawp.pl>
Date: Fri, 18 Sep 2015 15:40:58 +0200
Subject: [PATCH] avcodec/imgconvert: Support non-planar colorspaces while
padding
---
libavcodec/imgconvert.c | 37 +++++++++++++++++++++++++++++++++++--
1 file changed, 35 insertions(+), 2 deletions(-)
diff --git a/libavcodec/imgconvert.c b/libavcodec/imgconvert.c
index dc67560..884e65e 100644
--- a/libavcodec/imgconvert.c
+++ b/libavcodec/imgconvert.c
@@ -236,10 +236,42 @@ 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)
+ return -1;
+
+ if (!is_yuv_planar(desc)) {
+ if (src)
+ return -1; //TODO: Not yet implemented
+
+ av_image_fill_max_pixsteps(max_step, NULL, desc);
- if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB ||
- !is_yuv_planar(desc)) return -1;
+ if (padtop || padleft) {
+ memset(dst->data[0], color[0],
+ dst->linesize[0] * padtop + (padleft * max_step[0]));
+ }
+
+ if (padleft || padright) {
+ optr = dst->data[0] + dst->linesize[0] * padtop +
+ (dst->linesize[0] - (padright * max_step[0]));
+ yheight = height - 1 - (padtop + padbottom);
+ for (y = 0; y < yheight; y++) {
+ memset(optr, color[0], (padleft + padright) * max_step[0]);
+ optr += dst->linesize[0];
+ }
+ }
+ if (padbottom || padright) {
+ optr = dst->data[0] + dst->linesize[0] * (height - padbottom) -
+ (padright * max_step[0]);
+ memset(optr, color[0], dst->linesize[0] * padbottom +
+ (padright * max_step[0]));
+ }
+
+ return 0;
+ }
+
for (i = 0; i < 3; i++) {
x_shift = i ? desc->log2_chroma_w : 0;
y_shift = i ? desc->log2_chroma_h : 0;
@@ -284,6 +316,7 @@ int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width,
(padbottom >> y_shift) + (padright >> x_shift));
}
}
+
return 0;
}
--
1.8.3.1
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel