Merge commit 'a5e8c41c28f907d98d2a739db08f7aef4cbfcf3a'
[ffmpeg.git] / libavfilter / vf_ass.c
index c6a63c1..81dc773 100644 (file)
@@ -34,6 +34,9 @@
 #include "libavutil/parseutils.h"
 #include "drawutils.h"
 #include "avfilter.h"
 #include "libavutil/parseutils.h"
 #include "drawutils.h"
 #include "avfilter.h"
+#include "internal.h"
+#include "formats.h"
+#include "video.h"
 
 typedef struct {
     const AVClass *class;
 
 typedef struct {
     const AVClass *class;
@@ -43,7 +46,6 @@ typedef struct {
     char *filename;
     uint8_t rgba_map[4];
     int     pix_step[4];       ///< steps per pixel for each plane of the main output
     char *filename;
     uint8_t rgba_map[4];
     int     pix_step[4];       ///< steps per pixel for each plane of the main output
-    char *original_size_str;
     int original_w, original_h;
     FFDrawContext draw;
 } AssContext;
     int original_w, original_h;
     FFDrawContext draw;
 } AssContext;
@@ -51,20 +53,11 @@ typedef struct {
 #define OFFSET(x) offsetof(AssContext, x)
 
 static const AVOption ass_options[] = {
 #define OFFSET(x) offsetof(AssContext, x)
 
 static const AVOption ass_options[] = {
-    {"original_size",  "set the size of the original video (used to scale fonts)", OFFSET(original_size_str), AV_OPT_TYPE_STRING, {.str = NULL},  CHAR_MIN, CHAR_MAX },
+    {"original_size",  "set the size of the original video (used to scale fonts)", OFFSET(original_w), AV_OPT_TYPE_IMAGE_SIZE, {.str = NULL},  CHAR_MIN, CHAR_MAX },
     {NULL},
 };
 
     {NULL},
 };
 
-static const char *ass_get_name(void *ctx)
-{
-    return "ass";
-}
-
-static const AVClass ass_class = {
-    "AssContext",
-    ass_get_name,
-    ass_options
-};
+AVFILTER_DEFINE_CLASS(ass);
 
 /* libass supports a log level ranging from 0 to 7 */
 int ass_libav_log_level_map[] = {
 
 /* libass supports a log level ranging from 0 to 7 */
 int ass_libav_log_level_map[] = {
@@ -86,7 +79,7 @@ static void ass_log(int ass_level, const char *fmt, va_list args, void *ctx)
     av_log(ctx, level, "\n");
 }
 
     av_log(ctx, level, "\n");
 }
 
-static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
+static av_cold int init(AVFilterContext *ctx, const char *args)
 {
     AssContext *ass = ctx->priv;
     int ret;
 {
     AssContext *ass = ctx->priv;
     int ret;
@@ -106,14 +99,6 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
         return ret;
     }
 
         return ret;
     }
 
-    if (ass->original_size_str &&
-        av_parse_video_size(&ass->original_w, &ass->original_h,
-                            ass->original_size_str) < 0) {
-        av_log(ctx, AV_LOG_ERROR,
-               "Invalid original size '%s'.\n", ass->original_size_str);
-        return AVERROR(EINVAL);
-    }
-
     ass->library = ass_library_init();
     if (!ass->library) {
         av_log(ctx, AV_LOG_ERROR, "Could not initialize libass.\n");
     ass->library = ass_library_init();
     if (!ass->library) {
         av_log(ctx, AV_LOG_ERROR, "Could not initialize libass.\n");
@@ -144,7 +129,6 @@ static av_cold void uninit(AVFilterContext *ctx)
     AssContext *ass = ctx->priv;
 
     av_freep(&ass->filename);
     AssContext *ass = ctx->priv;
 
     av_freep(&ass->filename);
-    av_freep(&ass->original_size_str);
     if (ass->track)
         ass_free_track(ass->track);
     if (ass->renderer)
     if (ass->track)
         ass_free_track(ass->track);
     if (ass->renderer)
@@ -155,7 +139,7 @@ static av_cold void uninit(AVFilterContext *ctx)
 
 static int query_formats(AVFilterContext *ctx)
 {
 
 static int query_formats(AVFilterContext *ctx)
 {
-    avfilter_set_common_pixel_formats(ctx, ff_draw_supported_pixel_formats(0));
+    ff_set_common_formats(ctx, ff_draw_supported_pixel_formats(0));
     return 0;
 }
 
     return 0;
 }
 
@@ -212,8 +196,8 @@ static void end_frame(AVFilterLink *inlink)
 
     overlay_ass_image(ass, picref, image);
 
 
     overlay_ass_image(ass, picref, image);
 
-    avfilter_draw_slice(outlink, 0, picref->video->h, 1);
-    avfilter_end_frame(outlink);
+    ff_draw_slice(outlink, 0, picref->video->h, 1);
+    ff_end_frame(outlink);
 }
 
 AVFilter avfilter_vf_ass = {
 }
 
 AVFilter avfilter_vf_ass = {
@@ -227,8 +211,8 @@ AVFilter avfilter_vf_ass = {
     .inputs = (const AVFilterPad[]) {
         { .name             = "default",
           .type             = AVMEDIA_TYPE_VIDEO,
     .inputs = (const AVFilterPad[]) {
         { .name             = "default",
           .type             = AVMEDIA_TYPE_VIDEO,
-          .get_video_buffer = avfilter_null_get_video_buffer,
-          .start_frame      = avfilter_null_start_frame,
+          .get_video_buffer = ff_null_get_video_buffer,
+          .start_frame      = ff_null_start_frame,
           .draw_slice       = null_draw_slice,
           .end_frame        = end_frame,
           .config_props     = config_input,
           .draw_slice       = null_draw_slice,
           .end_frame        = end_frame,
           .config_props     = config_input,