[FFmpeg-devel] 8bpp planar crop patch

Teemu Keinonen teemu.keinonen
Thu Nov 26 19:53:09 CET 2009


Hi, I'm hoping to get this patch for 8bpp planar pixel formats cropping to
ffmpeg trunk.

I made it to crop flashsv encoded videos.

--Teemu Keinonen
-------------- next part --------------
Index: libavcodec/imgconvert.c
===================================================================
--- libavcodec/imgconvert.c	(revision 20598)
+++ libavcodec/imgconvert.c	(working copy)
@@ -1317,19 +1317,27 @@
     int y_shift;
     int x_shift;
 
-    if (pix_fmt < 0 || pix_fmt >= PIX_FMT_NB || !is_yuv_planar(&pix_fmt_info[pix_fmt]))
+    if (pix_fmt < 0 || pix_fmt >= PIX_FMT_NB)
         return -1;
 
-    y_shift = pix_fmt_info[pix_fmt].y_chroma_shift;
-    x_shift = pix_fmt_info[pix_fmt].x_chroma_shift;
+    if (!is_yuv_planar(&pix_fmt_info[pix_fmt])) {
+        if (pix_fmt_info[pix_fmt].depth != 8)
+            return -1;
+        dst->data[0] = src->data[0]+src->linesize[0]*top_band+(left_band*pix_fmt_info[pix_fmt].nb_channels);
+        dst->linesize[0] = src->linesize[0];
+    }
+    else {
+        y_shift = pix_fmt_info[pix_fmt].y_chroma_shift;
+        x_shift = pix_fmt_info[pix_fmt].x_chroma_shift;
 
-    dst->data[0] = src->data[0] + (top_band * src->linesize[0]) + left_band;
-    dst->data[1] = src->data[1] + ((top_band >> y_shift) * src->linesize[1]) + (left_band >> x_shift);
-    dst->data[2] = src->data[2] + ((top_band >> y_shift) * src->linesize[2]) + (left_band >> x_shift);
+        dst->data[0] = src->data[0] + (top_band * src->linesize[0]) + left_band;
+        dst->data[1] = src->data[1] + ((top_band >> y_shift) * src->linesize[1]) + (left_band >> x_shift);
+        dst->data[2] = src->data[2] + ((top_band >> y_shift) * src->linesize[2]) + (left_band >> x_shift);
 
-    dst->linesize[0] = src->linesize[0];
-    dst->linesize[1] = src->linesize[1];
-    dst->linesize[2] = src->linesize[2];
+        dst->linesize[0] = src->linesize[0];
+        dst->linesize[1] = src->linesize[1];
+        dst->linesize[2] = src->linesize[2];
+    }
     return 0;
 }
 



More information about the ffmpeg-devel mailing list