History

lavfi: modify avfilter_get_matrix to support separate scale factors

Jarek Samic committed 7 years ago

Commit 5b5746b1 parent d3cd33a3 files · +34 −16Browse files

Unified · Split

3 files
  1. libavfilter/transform.c +10 −3
  2. libavfilter/transform.h +19 −11
  3. libavfilter/vf_deshake.c +5 −2
libavfilter/transform.c+10−3
@@ -103,12 +103,19 @@ INTERPOLATE_METHOD(interpolate_biquadratic) · 102 unmodified lines
103103 }
104104 }
105105
106−void avfilter_get_matrix(float x_shift, float y_shift, float angle, float zoom, float *matrix) {
107− matrix[0] = zoom * cos(angle);
106+void ff_get_matrix(
107+ float x_shift,
108+ float y_shift,
109+ float angle,
110+ float scale_x,
111+ float scale_y,
112+ float *matrix
113+) {
114+ matrix[0] = scale_x * cos(angle);
108115 matrix[1] = -sin(angle);
109116 matrix[2] = x_shift;
110117 matrix[3] = -matrix[1];
111− matrix[4] = matrix[0];
118+ matrix[4] = scale_y * cos(angle);
112119 matrix[5] = y_shift;
113120 matrix[6] = 0;
114121 matrix[7] = 0;
libavfilter/transform.h+19−11
@@ -60,20 +60,28 @@ enum FillMethod { · 59 unmodified lines
6060 #define FILL_DEFAULT FILL_ORIGINAL
6161
6262 /**
63− * Get an affine transformation matrix from a given translation, rotation, and
64− * zoom factor. The matrix will look like:
63+ * Get an affine transformation matrix from given translation, rotation, and
64+ * zoom factors. The matrix will look like:
6565 *
66− * [ zoom * cos(angle), -sin(angle), x_shift,
67− * sin(angle), zoom * cos(angle), y_shift,
68− * 0, 0, 1 ]
66+ * [ scale_x * cos(angle), -sin(angle), x_shift,
67+ * sin(angle), scale_y * cos(angle), y_shift,
68+ * 0, 0, 1 ]
6969 *
70− * @param x_shift horizontal translation
71− * @param y_shift vertical translation
72− * @param angle rotation in radians
73− * @param zoom scale percent (1.0 = 100%)
74− * @param matrix 9-item affine transformation matrix
70+ * @param x_shift horizontal translation
71+ * @param y_shift vertical translation
72+ * @param angle rotation in radians
73+ * @param scale_x x scale percent (1.0 = 100%)
74+ * @param scale_y y scale percent (1.0 = 100%)
75+ * @param matrix 9-item affine transformation matrix
7576 */
76−void avfilter_get_matrix(float x_shift, float y_shift, float angle, float zoom, float *matrix);
77+void ff_get_matrix(
78+ float x_shift,
79+ float y_shift,
80+ float angle,
81+ float scale_x,
82+ float scale_y,
83+ float *matrix
84+);
7785
7886 /**
7987 * Add two matrices together. result = m1 + m2.
libavfilter/vf_deshake.c+5−2
@@ -421,6 +421,7 @@ static int filter_frame(AVFilterLink *link, AVFrame *in) · 420 unmodified lines
421421 const int chroma_width = AV_CEIL_RSHIFT(link->w, desc->log2_chroma_w);
422422 const int chroma_height = AV_CEIL_RSHIFT(link->h, desc->log2_chroma_h);
423423 int aligned;
424+ float transform_zoom;
424425
425426 out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
426427 if (!out) {
@@ -505,10 +506,12 @@ static int filter_frame(AVFilterLink *link, AVFrame *in) · 78 unmodified lines
505506 deshake->last.angle = t.angle;
506507 deshake->last.zoom = t.zoom;
507508
509+ transform_zoom = 1.0 + t.zoom / 100.0;
510+
508511 // Generate a luma transformation matrix
509− avfilter_get_matrix(t.vec.x, t.vec.y, t.angle, 1.0 + t.zoom / 100.0, matrix_y);
512+ ff_get_matrix(t.vec.x, t.vec.y, t.angle, transform_zoom, transform_zoom, matrix_y);
510513 // Generate a chroma transformation matrix
511− avfilter_get_matrix(t.vec.x / (link->w / chroma_width), t.vec.y / (link->h / chroma_height), t.angle, 1.0 + t.zoom / 100.0, matrix_uv);
514+ ff_get_matrix(t.vec.x / (link->w / chroma_width), t.vec.y / (link->h / chroma_height), t.angle, transform_zoom, transform_zoom, matrix_uv);
512515 // Transform the luma and chroma planes
513516 ret = deshake->transform(link->dst, link->w, link->h, chroma_width, chroma_height,
514517 matrix_y, matrix_uv, INTERPOLATE_BILINEAR, deshake->edge, in, out);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t