From patchwork Sat Sep 11 08:12:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Soft Works X-Patchwork-Id: 30130 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2a4a:0:0:0:0 with SMTP id k10csp2234691iov; Sat, 11 Sep 2021 01:13:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwFpTscY+gQDYhTvhh5q617w7XY2DJzScI2gHdKmtXDLCp5BVp30Bo7qe0N1xXeKH5YnR0L X-Received: by 2002:a17:906:b46:: with SMTP id v6mr1801712ejg.262.1631347998962; Sat, 11 Sep 2021 01:13:18 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a14si1180728edf.400.2021.09.11.01.13.08; Sat, 11 Sep 2021 01:13:18 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@hotmail.com header.s=selector1 header.b=U88JSljZ; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=hotmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9AEFF68A5AF; Sat, 11 Sep 2021 11:13:06 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1anam02olkn2087.outbound.protection.outlook.com [40.92.44.87]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C967C68A2DE for ; Sat, 11 Sep 2021 11:12:59 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aOO/VMrsyEQ8zQjGd/rcOpdPY7TkfyE20IhpbsZwhL0W5omMeCl/tGDmF87HH/jRePjkPvro1PtUguEs0TjWYfUM+k2YLun5DdTROBOBkjspoRiP6D3f4WEmXT0xZpCrHpZTmIx2i8HxfrXDstY1hV6fniPyX4QnarObPl+K4hQSu3yd63LTw7Jr+3FHr9Wb7SxCvBw2EKtDAt/u+GMojL8jAGEINmX0RLLdUJmjk0ij3SU3jNLlOAqC3ohdK8+/QR1CdO11JdDDDJjjLXwUmfuIfn+IGgwWZ7rVGyMUN5Qidu4n4QJBWb6OuhzaO32Dnx+gsYaHdJqTCKGYyuXIuA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=KbBFX0HK1wIghhAZCiJ+nEuqusHQaio8COqqz800vbA=; b=Tv0Ui0JHjduYqD8w25aCjbHcgAkrj8+4D1Cjkzk6PcA1U/2mj9FDMkmBJg4wob9D9H8Joi2hZDISxmILl74ejqiVoljafhfGfWHstLnfCeCrVLvVqD6lGDad7GWQBs9Agpk6VyqMyKho15bZPWabI0A5nwoNbPsRVvCSsnr3boKDjPBfby4sjHb2b6vzTlgIF2T1BqdaA2PGVJmbGcXf0UKSXCK/DQPqWpCjz8k1cojs5pnRCek+7vEUeVcgzWWUmUxW3vrAm8tcEtbrfkXWxl3hhd28KA/hygvzd8uoeHEq1+z7f7ywUxe7sHgiK0Q783Wn0mwdca2CiyHYCbz6Lg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KbBFX0HK1wIghhAZCiJ+nEuqusHQaio8COqqz800vbA=; b=U88JSljZUB1lvZK030iSeu7zWm4mDO09uXWXk4tAuCIie6uSKqFFLgQ7rsrwspQbgvFqK+x2DtQ2tgm2vFA1kwXePRUeTTVtkdanReeG6SBALiOgtPkhzk0eTrb55h88TTvJjSbQuc5hnXblNzou9CEEsxgSNt29+qsV72BVkR3SjxhJDh+lp46qx5h91zrKJWvveZfjL//RR1hfSC7SM1ly5psuWIln4K26CTO/JhYnBfPTPRAIdFy1DA1qlUGxbhoKFSEqeCK6DJ9VAKzvmQJ3cGinQLuwhwJcfg9IQHj6O8MrXpv93GmxPlajyDZkqu6U9LIm7LSBSBygif5lRA== Received: from MN2PR04MB5981.namprd04.prod.outlook.com (2603:10b6:208:da::10) by MN2PR04MB6048.namprd04.prod.outlook.com (2603:10b6:208:e5::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4500.16; Sat, 11 Sep 2021 08:12:57 +0000 Received: from MN2PR04MB5981.namprd04.prod.outlook.com ([fe80::ecfe:2528:2012:22cb]) by MN2PR04MB5981.namprd04.prod.outlook.com ([fe80::ecfe:2528:2012:22cb%5]) with mapi id 15.20.4500.018; Sat, 11 Sep 2021 08:12:56 +0000 From: Soft Works To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH v4 01/18] avutil/frame: Subtitle Filtering - Add AVMediaType property to AVFrame Thread-Index: AdejcVrBX0YG5+jrTPmiEDLxuGTtkQ== Date: Sat, 11 Sep 2021 08:12:56 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [qeBBmhHvePfUFwNS/8+iUZicOofow3wlwA9EfJYQ2og=] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 2598177d-4a5e-4a50-7d52-08d974fbf671 x-ms-traffictypediagnostic: MN2PR04MB6048: x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 0X6lbtJukhtZKqXoPSIBdf/fqO7rja89OJRQVYwz0rraCai2y3EpwiwTeeKbo1vUVfd5tls1ozB2/GHpqHCbBZRSt04uHz0throCWdA5up0DSipFcJbGJ0Uwgiq7h2gu6QfICS3d3qEN6KP8EjKFAL5sT16WdeNUk9a+79TompxvPHbSXLDlHxHNkAetek2by6y/5x/BR6V+d4q7d+S5CZr3w1IsGSWulwu+5SHLNwd0RcbUgK2gHfxHgXMmbgFcSgdNNlrGNun2g42EV0OPWHoFNfdeTqd7NEoY1G4Y0XHUtVokp9yEk4VaciVVmzYGdbAscreCD1UFM9HAJ9my2WsWrN/Yk/XdWZLAO7k6Zzq3CLLwJHjCai7RHc0UjUhc8eCFAuPVjn+lUVME6K3WyTTiuMtIwGK6qYpedkik1YtIxUVD/wlmtPJnm62GnILO x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: CQqvE3hlziVLNbnIDgAR0ciucajApnhgwlIpBOSzqBuVpkCM5DZPbfJTSihbrd1Ll19DlVPrRPSJfelI7LsZb8BJzLQlY3dSg6gZf1aosOX8oB8Bdw/0EJfeFRyFcM+4sZlVzsT8oqd1JNapuReGDQ== x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-3174-20-msonline-outlook-529c7.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR04MB5981.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 2598177d-4a5e-4a50-7d52-08d974fbf671 X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2021 08:12:56.8492 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR04MB6048 Subject: [FFmpeg-devel] [PATCH v4 01/18] avutil/frame: Subtitle Filtering - Add AVMediaType property to AVFrame X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 1T5SpquuEA3o This is the root commit for adding subtitle filtering capabilities. Adding the media type property to AVFrame replaces the previous way of distinction which was based on checking width and height to determine whether a frame is audio or video. Signed-off-by: softworkz --- libavutil/frame.c | 78 +++++++++++++++++++++++++++++++++++---------- libavutil/frame.h | 39 +++++++++++++++++++++-- libavutil/version.h | 2 +- 3 files changed, 99 insertions(+), 20 deletions(-) diff --git a/libavutil/frame.c b/libavutil/frame.c index b0ceaf7145..09149721c0 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -244,22 +244,39 @@ static int get_audio_buffer(AVFrame *frame, int align) } int av_frame_get_buffer(AVFrame *frame, int align) +{ + if (frame->width > 0 && frame->height > 0) + return av_frame_get_buffer2(frame, AVMEDIA_TYPE_VIDEO, align); + else if (frame->nb_samples > 0 && (frame->channel_layout || frame->channels > 0)) + return av_frame_get_buffer2(frame, AVMEDIA_TYPE_AUDIO, align); + + return AVERROR(EINVAL); +} + +int av_frame_get_buffer2(AVFrame *frame, enum AVMediaType type, int align) { if (frame->format < 0) return AVERROR(EINVAL); - if (frame->width > 0 && frame->height > 0) + frame->type = type; + + switch(frame->type) { + case AVMEDIA_TYPE_VIDEO: return get_video_buffer(frame, align); - else if (frame->nb_samples > 0 && (frame->channel_layout || frame->channels > 0)) + case AVMEDIA_TYPE_AUDIO: return get_audio_buffer(frame, align); - - return AVERROR(EINVAL); + case AVMEDIA_TYPE_SUBTITLE: + return 0; + default: + return AVERROR(EINVAL); + } } static int frame_copy_props(AVFrame *dst, const AVFrame *src, int force_copy) { int ret, i; + dst->type = src->type; dst->key_frame = src->key_frame; dst->pict_type = src->pict_type; dst->sample_aspect_ratio = src->sample_aspect_ratio; @@ -331,6 +348,7 @@ int av_frame_ref(AVFrame *dst, const AVFrame *src) av_assert1(dst->width == 0 && dst->height == 0); av_assert1(dst->channels == 0); + dst->type = src->type; dst->format = src->format; dst->width = src->width; dst->height = src->height; @@ -344,7 +362,7 @@ int av_frame_ref(AVFrame *dst, const AVFrame *src) /* duplicate the frame data if it's not refcounted */ if (!src->buf[0]) { - ret = av_frame_get_buffer(dst, 0); + ret = av_frame_get_buffer2(dst, dst->type, 0); if (ret < 0) goto fail; @@ -499,6 +517,7 @@ int av_frame_make_writable(AVFrame *frame) return 0; memset(&tmp, 0, sizeof(tmp)); + tmp.type = frame->type; tmp.format = frame->format; tmp.width = frame->width; tmp.height = frame->height; @@ -509,7 +528,7 @@ int av_frame_make_writable(AVFrame *frame) if (frame->hw_frames_ctx) ret = av_hwframe_get_buffer(frame->hw_frames_ctx, &tmp, 0); else - ret = av_frame_get_buffer(&tmp, 0); + ret = av_frame_get_buffer2(&tmp, tmp.type, 0); if (ret < 0) return ret; @@ -544,14 +563,22 @@ AVBufferRef *av_frame_get_plane_buffer(AVFrame *frame, int plane) uint8_t *data; int planes, i; - if (frame->nb_samples) { - int channels = frame->channels; - if (!channels) - return NULL; - CHECK_CHANNELS_CONSISTENCY(frame); - planes = av_sample_fmt_is_planar(frame->format) ? channels : 1; - } else + switch(frame->type) { + case AVMEDIA_TYPE_VIDEO: planes = 4; + break; + case AVMEDIA_TYPE_AUDIO: + { + int channels = frame->channels; + if (!channels) + return NULL; + CHECK_CHANNELS_CONSISTENCY(frame); + planes = av_sample_fmt_is_planar(frame->format) ? channels : 1; + break; + } + default: + return NULL; + } if (plane < 0 || plane >= planes || !frame->extended_data[plane]) return NULL; @@ -675,17 +702,34 @@ static int frame_copy_audio(AVFrame *dst, const AVFrame *src) return 0; } +static int frame_copy_subtitles(AVFrame *dst, const AVFrame *src) +{ + dst->type = AVMEDIA_TYPE_SUBTITLE; + dst->format = src->format; + + if (src->buf[0]) { + dst->buf[0] = av_buffer_ref(src->buf[0]); + dst->data[0] = src->data[0]; + } + + return 0; +} + int av_frame_copy(AVFrame *dst, const AVFrame *src) { if (dst->format != src->format || dst->format < 0) return AVERROR(EINVAL); - if (dst->width > 0 && dst->height > 0) + switch(dst->type) { + case AVMEDIA_TYPE_VIDEO: return frame_copy_video(dst, src); - else if (dst->nb_samples > 0 && dst->channels > 0) + case AVMEDIA_TYPE_AUDIO: return frame_copy_audio(dst, src); - - return AVERROR(EINVAL); + case AVMEDIA_TYPE_SUBTITLE: + return frame_copy_subtitles(dst, src); + default: + return AVERROR(EINVAL); + } } void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type) diff --git a/libavutil/frame.h b/libavutil/frame.h index ff2540a20f..c104815df9 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -271,7 +271,7 @@ typedef struct AVRegionOfInterest { } AVRegionOfInterest; /** - * This structure describes decoded (raw) audio or video data. + * This structure describes decoded (raw) audio, video or subtitle data. * * AVFrame must be allocated using av_frame_alloc(). Note that this only * allocates the AVFrame itself, the buffers for the data must be managed @@ -302,6 +302,13 @@ typedef struct AVRegionOfInterest { */ typedef struct AVFrame { #define AV_NUM_DATA_POINTERS 8 + /** + * Media type of the frame (audio, video, subtitles..) + * + * See AVMEDIA_TYPE_xxx + */ + enum AVMediaType type; + /** * pointer to the picture/channel planes. * This might be different from the first allocated byte @@ -371,7 +378,7 @@ typedef struct AVFrame { /** * format of the frame, -1 if unknown or unset * Values correspond to enum AVPixelFormat for video frames, - * enum AVSampleFormat for audio) + * enum AVSampleFormat for audio, AVSubtitleType for subtitles) */ int format; @@ -721,6 +728,8 @@ void av_frame_move_ref(AVFrame *dst, AVFrame *src); /** * Allocate new buffer(s) for audio or video data. * + * Note: For subtitle data, use av_frame_get_buffer2 + * * The following fields must be set on frame before calling this function: * - format (pixel format for video, sample format for audio) * - width and height for video @@ -743,6 +752,32 @@ void av_frame_move_ref(AVFrame *dst, AVFrame *src); */ int av_frame_get_buffer(AVFrame *frame, int align); +/** + * Allocate new buffer(s) for audio, video or subtitle data. + * + * The following fields must be set on frame before calling this function: + * - format (pixel format for video, sample format for audio) + * - width and height for video + * - nb_samples and channel_layout for audio + * + * This function will fill AVFrame.data and AVFrame.buf arrays and, if + * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf. + * For planar formats, one buffer will be allocated for each plane. + * + * @warning: if frame already has been allocated, calling this function will + * leak memory. In addition, undefined behavior can occur in certain + * cases. + * + * @param frame frame in which to store the new buffers. + * @param type media type to set for the frame. + * @param align Required buffer size alignment. If equal to 0, alignment will be + * chosen automatically for the current CPU. It is highly + * recommended to pass 0 here unless you know what you are doing. + * + * @return 0 on success, a negative AVERROR on error. + */ +int av_frame_get_buffer2(AVFrame *frame, enum AVMediaType type, int align); + /** * Check if the frame data is writable. * diff --git a/libavutil/version.h b/libavutil/version.h index f220e192c8..2b5ac540a4 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -79,7 +79,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 57 -#define LIBAVUTIL_VERSION_MINOR 5 +#define LIBAVUTIL_VERSION_MINOR 6 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ From patchwork Sat Sep 11 08:14:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Soft Works X-Patchwork-Id: 30132 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2a4a:0:0:0:0 with SMTP id k10csp2235284iov; Sat, 11 Sep 2021 01:14:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxXzYhvoBd2Pj6OHQ1YMjndf1npiog1hXfdHIgytWJy3pUJXhPU3LCu+gR8Tbtj21S4jI8Z X-Received: by 2002:a05:6402:524f:: with SMTP id t15mr2162677edd.121.1631348062628; Sat, 11 Sep 2021 01:14:22 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id d7si1287545edq.7.2021.09.11.01.14.21; Sat, 11 Sep 2021 01:14:22 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@hotmail.com header.s=selector1 header.b=Hft8nwbu; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=hotmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 98F3D68A5D1; Sat, 11 Sep 2021 11:14:19 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11olkn2101.outbound.protection.outlook.com [40.92.18.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 13A026809C3 for ; Sat, 11 Sep 2021 11:14:12 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cSsocnq554lhWLwxaUisWzaTfciHsXtE/e1eXg4uIWgbE3TF/9vw54v6AwbuFV8iYJ7PEBDRrE6U8+Nz8hpXa1VJ+7ApQgh4Mp8bxAtyMoDhrNvL7/JoidIZPQMBz1fslnETyHh99GcsIvLCuPw68A63nHKwfi25+eDP2DwZUrXcrFkqYRp8/SdB/x8BK6tfEdfGkXVAD5slCzF2YUsO1NuZ3JpVUjhvpzIfIEl9LEac7Xw/pIrj2zO51kKGuNVAIfMZb0JRX7j9ArDcaPwbLmw8t4D7zEG3YDIA7wWc7zwjAIccujSTy3jXHKFMglBJMyaAiKEGaRTegxr118bj9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=L+0hREfX4eUh5Q7rzQiUyM+QqSYqC3DUo5fqX+5qvlY=; b=keP6FovRpQN9iSteDRpiUfbSHUUTHCndK87maxBBe5nCzoZOcQL6wNv+ttNWnh7saDfayjIFLIs+di08qeQZlkjOvjlwEA7klzUOmufJ4ygRWJBvS6j9clb2JI215+MV5EIu11JOjzzUsxE/mwJsbUO5CNdZPneZwqhNGFiWChYM/bJspoBwTcxuD7z+vitykeBV3Knss84Rgxaf9nV0a6WuzBP32G0Mnoct5ZlQ4sFkQf+rhmgg7OY2KZ1wnFLnyiADITSDQ2Prmuu15SS9qn08003l2Dfq38XUQo3YoE7pqNjgLTgwN++XJ9C4sK06ezUVfu3YjBYWpOOBrBJ41w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=L+0hREfX4eUh5Q7rzQiUyM+QqSYqC3DUo5fqX+5qvlY=; b=Hft8nwbuHbooXC9s01U5nKYpPswN720PmOOjUrVFQ6Q9egJDN1ZGGfNOElIX6Acs0Tvs0SU5oj/DDvcEza55XuafXKH+l24AKOr6mHdCUsEnG4ag1II1ojmQ6+n8APznzhK5b9Fhef+9o+zpPh7gJYxcH+5r75Wy9LhVA+SEGoV2nJf4Txz/MqmVrMH+Ruw2J3PxU9c2oEHW5vz3Q5V/iIqV96GexOZtlBovJgIcqCGkhWIzk+jB4Zuw9gLn2qPCNgY8t+MjzzhTsM1bhwjEyhMEn8SsvccX2KTDkdfgi0Q8h2cnNJup1yRwJ+tC2NewzBvGWEbYXWTdiU5JEIdXsg== Received: from MN2PR04MB5981.namprd04.prod.outlook.com (2603:10b6:208:da::10) by MN2PR04MB6048.namprd04.prod.outlook.com (2603:10b6:208:e5::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4500.16; Sat, 11 Sep 2021 08:14:05 +0000 Received: from MN2PR04MB5981.namprd04.prod.outlook.com ([fe80::ecfe:2528:2012:22cb]) by MN2PR04MB5981.namprd04.prod.outlook.com ([fe80::ecfe:2528:2012:22cb%5]) with mapi id 15.20.4500.018; Sat, 11 Sep 2021 08:14:05 +0000 From: Soft Works To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH v4 02/18] avutil/subfmt: Move AVSubtitleType, AVSubtitle and AVSubtitleRect to avutil Thread-Index: AdemwRmnL/ThgFsIR+OoKPrLkl6fBw== Date: Sat, 11 Sep 2021 08:14:05 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [YTLciYzkpKn5wH4ADo90VQ/2r2r06QP4MlJRhxIgmJY=] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: df61f9ef-efaf-4307-9129-08d974fc1f5f x-ms-traffictypediagnostic: MN2PR04MB6048: x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Qi/YLmZv8fvYi8DUT9akNua/BS1laPvpFpzROoVPJnzQ3tYQx8P56JY2aXALLXK6Rif6CYoCVGR4WwDheB2UdZl+S46WJWLO59Tj4rhBhS0CNk8bH809A3Q89FPQu8zCkym+sizpQn12iPHfSdr29FmSZxMAPdEdjmgfyt2c+qVBmw/eB5BnNkbv6QB2borjI3w4Vp7n9kthgebKZTbc3XFq1/Gu4KWDplNpA7Tbv1XD5ZnENPfCmnhEpIAJSklTuEFmcBzfUhrGpdEmL7N9kSnHuMJeNlzDw7FC4S4oh5r9wKSrbqwjTdBMFgGeTBpVzhtcHaA84EChkzAEXzk5js0WLOP1jheNPXuzsDdgWaVPKmNNEDBguWmjS+I+GT8WpeF33BFuVjCDREcafG+L0eQsN86NTSOFbhnjL68u0DAVkGhTJarpRwBtk2DQohDG x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: 3X+YGWU1zJXj/g3wDGCeSG/qrzzoGmrvVjiTZKtIwTZPsfwj2M6ZqabObPtbTiX0WxFO4wXplslkLfp1gZlUybs2BV0bg997WXHc02uOMz10MKknuyLt9QXMmj2gTrour655AA0MRO/5gB8FQ4gh9Q== x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-3174-20-msonline-outlook-529c7.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR04MB5981.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: df61f9ef-efaf-4307-9129-08d974fc1f5f X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2021 08:14:05.5733 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR04MB6048 Subject: [FFmpeg-devel] [PATCH v4 02/18] avutil/subfmt: Move AVSubtitleType, AVSubtitle and AVSubtitleRect to avutil X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: BRD9KrXvIJqA Moving these type to avutil - analog to e.g. samplefmt, pixfmt Signed-off-by: softworkz --- libavutil/Makefile | 2 + libavutil/subfmt.c | 78 ++++++++++++++++++++++++++++ libavutil/subfmt.h | 125 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 205 insertions(+) create mode 100644 libavutil/subfmt.c create mode 100644 libavutil/subfmt.h diff --git a/libavutil/Makefile b/libavutil/Makefile index 410ac636f7..04e1101bf3 100644 --- a/libavutil/Makefile +++ b/libavutil/Makefile @@ -74,6 +74,7 @@ HEADERS = adler32.h \ sha512.h \ spherical.h \ stereo3d.h \ + subfmt.h \ threadmessage.h \ time.h \ timecode.h \ @@ -159,6 +160,7 @@ OBJS = adler32.o \ slicethread.o \ spherical.o \ stereo3d.o \ + subfmt.o \ threadmessage.o \ time.o \ timecode.o \ diff --git a/libavutil/subfmt.c b/libavutil/subfmt.c new file mode 100644 index 0000000000..8476c1a15d --- /dev/null +++ b/libavutil/subfmt.c @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2021 softworkz + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include "common.h" +#include "subfmt.h" + +typedef struct SubtitleFmtInfo { + enum AVSubtitleType fmt; + char* name; +} SubtitleFmtInfo; + +static const SubtitleFmtInfo sub_fmt_info[AV_SUBTITLE_FMT_NB] = { + {.fmt = AV_SUBTITLE_FMT_UNKNOWN, .name = "Unknown subtitle format", }, + {.fmt = AV_SUBTITLE_FMT_BITMAP, .name = "Graphical subtitles", }, + {.fmt = AV_SUBTITLE_FMT_TEXT, .name = "Text subtitles (plain)", }, + {.fmt = AV_SUBTITLE_FMT_ASS, .name = "Text subtitles (ass)", }, +}; + +const char *av_get_subtitle_fmt_name(enum AVSubtitleType sub_fmt) +{ + if (sub_fmt < 0 || sub_fmt >= AV_SUBTITLE_FMT_NB) + return NULL; + return sub_fmt_info[sub_fmt].name; +} + +enum AVSubtitleType av_get_subtitle_fmt(const char *name) +{ + int i; + + for (i = 0; i < AV_SUBTITLE_FMT_NB; i++) + if (!strcmp(sub_fmt_info[i].name, name)) + return i; + return AV_SUBTITLE_FMT_NONE; +} + + +void avsubtitle_free(AVSubtitle *sub) +{ + unsigned i; + + for (i = 0; i < sub->num_rects; i++) { + av_freep(&sub->rects[i]->data[0]); + av_freep(&sub->rects[i]->data[1]); + av_freep(&sub->rects[i]->data[2]); + av_freep(&sub->rects[i]->data[3]); + av_freep(&sub->rects[i]->text); + av_freep(&sub->rects[i]->ass); + av_freep(&sub->rects[i]); + } + + av_freep(&sub->rects); + + memset(sub, 0, sizeof(*sub)); +} + +void avsubtitle_free_ref(void *opaque, uint8_t *data) +{ + avsubtitle_free((AVSubtitle *)data); +} + diff --git a/libavutil/subfmt.h b/libavutil/subfmt.h new file mode 100644 index 0000000000..c6544433d0 --- /dev/null +++ b/libavutil/subfmt.h @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2021 softworkz + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVUTIL_SUBFMT_H +#define AVUTIL_SUBFMT_H + +#include + +#include "attributes.h" + +enum AVSubtitleType { + + /** + * Subtitle format unknown. + */ + AV_SUBTITLE_FMT_NONE = -1, + + /** + * Subtitle format unknown. + */ + AV_SUBTITLE_FMT_UNKNOWN = 0, + + /** + * Bitmap area in AVSubtitleRect.data, pixfmt AV_PIX_FMT_PAL8. + */ + AV_SUBTITLE_FMT_BITMAP = 1, + + /** + * Plain text in AVSubtitleRect.text. + */ + AV_SUBTITLE_FMT_TEXT = 2, + + /** + * Text Formatted as per ASS specification, contained AVSubtitleRect.ass. + */ + AV_SUBTITLE_FMT_ASS = 3, + + AV_SUBTITLE_FMT_NB, +}; + +typedef struct AVSubtitleRect { + int x; ///< top left corner of pict, undefined when pict is not set + int y; ///< top left corner of pict, undefined when pict is not set + int w; ///< width of pict, undefined when pict is not set + int h; ///< height of pict, undefined when pict is not set + int nb_colors; ///< number of colors in pict, undefined when pict is not set + + /** + * data+linesize for the bitmap of this subtitle. + */ + uint8_t *data[4]; + int linesize[4]; + + enum AVSubtitleType type; + + char *text; ///< 0 terminated plain UTF-8 text + + /** + * 0-terminated ASS/SSA compatible event line. + */ + char *ass; + + int flags; +} AVSubtitleRect; + +typedef struct AVSubtitle { + enum AVSubtitleType format; + uint32_t start_display_time; /* relative to packet pts, in ms */ + uint32_t end_display_time; /* relative to packet pts, in ms */ + unsigned num_rects; + AVSubtitleRect **rects; + int64_t pts; ///< Same as packet pts, in AV_TIME_BASE + + /** + * Header containing style information for text subtitles. + */ + char *header; +} AVSubtitle; + +/** + * Return the name of sub_fmt, or NULL if sub_fmt is not + * recognized. + */ +const char *av_get_subtitle_fmt_name(enum AVSubtitleType sub_fmt); + +/** + * Return a subtitle format corresponding to name, or AV_SUBTITLE_FMT_NONE + * on error. + */ +enum AVSubtitleType av_get_subtitle_fmt(const char *name); + +/** + * Free all allocated data in the given subtitle struct. + * + * @param sub AVSubtitle to free. + */ +void avsubtitle_free(AVSubtitle *sub); + +/** + * Free subtitle (for use with av_buffer) + * + * @param opaque unused + * @param data AVSubtitle to free. + */ +void avsubtitle_free_ref(void *opaque, uint8_t *data); + + +#endif /* AVUTIL_SUBFMT_H */ From patchwork Sat Sep 11 08:15:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Soft Works X-Patchwork-Id: 30129 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2a4a:0:0:0:0 with SMTP id k10csp2235822iov; Sat, 11 Sep 2021 01:15:27 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzrB6KTz7bSJZnSZKqgrAR/3RnPXqKB8PDXps4CqthcFLbkUB0XGJvcZ0EaGPHySg3i8Z4r X-Received: by 2002:a17:906:f43:: with SMTP id h3mr1750294ejj.267.1631348127312; Sat, 11 Sep 2021 01:15:27 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id bz5si1241469ejc.506.2021.09.11.01.15.26; Sat, 11 Sep 2021 01:15:27 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@hotmail.com header.s=selector1 header.b=qq1wyM9H; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=hotmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C08656809C3; Sat, 11 Sep 2021 11:15:23 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1anam02olkn2100.outbound.protection.outlook.com [40.92.44.100]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 07CC86809C3 for ; Sat, 11 Sep 2021 11:15:17 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LQjKzfw775Xb3Kt4ralJw6H1V2hkCq/WNXI22n0fC5NBSkGOOyVfNGyGQiMJ+UF+aH/ZDtObs59gloTMkWKaYWTs/Hg4QyfQQTdcdziPK2YwOhQSvWVQysXbas/hTxYvPw0QJqHkzazMWhpdRzz3/43M/zkGf2BI8RKCiAYkRa29rd18Kv61B0gJ6cLB6yNWWJh/zGtzp7jIXTPc0FF8uxlNZJDD9JTArFJYfsB+Sv24JJ7VEiTSs426hkxQhIwGxrB52hEkLlRZyjhAWRWarMIqqSBcs6fApVNZ/HzEgIsIB4arU59VOh4QL5fTbAiMBM6K+xbaSUnG3V89C55+6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=eBC+QpROCscMiwdQPyx9W6eXpaZyeZaKRmaQ5Tn0IrE=; b=e27xYN1Xtk/fDnxiMCuWxmzzhP+/wptfrI9nD1MlJH+ffivtRlV7emV05mSs95XrFmf5b2z7LzZ1wMOT9RJu3Xzj8PDFEeQcQ1qZK72srb6nB75P2KOmFo/MC95+pPUHQ0TcGPi1iq7BxMDe63RPDEXdg3Wyo1nTTFjNyNdF19sjH2ZkUgtmMOMIg9gZRgXK1Dfwf0ZjeYCDubdLXAXgF9tw9+L3fQ8M6Hd2IDIdY5re97ASSB23KidlORtAdWz3UWblvekySv1j1H8/a0n50ntbh1DhCTK5SHKOPQ9QGT7lJ6ImFrsUDKPLHjxPjAuVCPH8nSGxMIbLmsAKyxZ2Xg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=eBC+QpROCscMiwdQPyx9W6eXpaZyeZaKRmaQ5Tn0IrE=; b=qq1wyM9Ho9wliOkeeqnyNu6f0gcVAHpHqipoM2wzxQ63CndOOdUs4iP2WB+MT6msbD48OoKTB7RwiBKvE31gcKHGOaxpXjKkdByti0qgmQKFzwxXGGJFHocrGGoXeSeufcgDMhsno6Y4Gz19Hks+JgM6yKkVAxLNh07rcrTQgaDVpZl6XYvmVzuWVFJlBKdd96XHJ9KsPmTiof1bQWpLV9rMWFkBz5Cja9YZDjpslIS5Q5RX70OrFhy902rjq62qD7ko2CNUYHJcO9IjS6mqDs2cbxPMdkVvrIpSjZpMbQ8E/EIL68qzh9f9lMWOtqx6fDb3+5bVumVSutd8pZ4qVw== Received: from MN2PR04MB5981.namprd04.prod.outlook.com (2603:10b6:208:da::10) by MN2PR04MB6048.namprd04.prod.outlook.com (2603:10b6:208:e5::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4500.16; Sat, 11 Sep 2021 08:15:14 +0000 Received: from MN2PR04MB5981.namprd04.prod.outlook.com ([fe80::ecfe:2528:2012:22cb]) by MN2PR04MB5981.namprd04.prod.outlook.com ([fe80::ecfe:2528:2012:22cb%5]) with mapi id 15.20.4500.018; Sat, 11 Sep 2021 08:15:14 +0000 From: Soft Works To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH v4 03/18] avcodec/avcodec: Remove AVSubtitleType, AVSubtitle and AVSubtitleRect from avcodec Thread-Index: AdemwYDET5VOomxFS1i7sZMIFeVY2A== Date: Sat, 11 Sep 2021 08:15:14 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [3uNyweGdNRXxfvY5J0r6DD3jzrITl7mFfwNWWvPNxh8=] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 6e2fbb55-8693-48b9-dd31-08d974fc488b x-ms-traffictypediagnostic: MN2PR04MB6048: x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: olS6N1mt4Z5n6fgAPn3gYd6fvmRFar5DXo8LoDgs2W/uQmH5GPd74iK23BBRX7Lbiz7Pv1pCskeA93CpZwoE/8g65JfmyNvcQsSF8KpCFL3/KYiWrxD8PHfd8v/X9v9slZ3OcYwCezdFagf8d08V2Eqjp/zlSt68CPA94od9gbEXd3BG/OfmK4VnsI/jzt6f4nD7s+SmNmVnhiItBfqp47AbWOZatB+Md8l6YBhLsl+srub4weq3EyHOKfXwtYrre497PB3xNwZgsqbWYeKQdN82/l4AXp3EowQFf/vVwqAG5F3wYkJMPlaY+EmkBL8EZBA4WXgMEduiMnfw9OvTDwUs5A2IvVhsIxZCh36hW1EwC5r14U35aXU8hen3B3iytj1XUK9ykyh0Ojl/ld0IRLZi/kOV15aaJU/xVFreDNd83yg5UiA+dafl1rNx+t5g x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: z7O6hNpQTuPr3ynJqLBNT0wPtY3r//wL0LtMv8x3ns3MUCg52P3jLCOBpSz5j/Qi+7mnmixE9Z5n+uIa2BNtW+fYUQZBBn0wGuI/F2GeD20hQhFAK1RfyScPv5LYwuXfAnWXaqJzvj/jH1F/O9IfrQ== x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-3174-20-msonline-outlook-529c7.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR04MB5981.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 6e2fbb55-8693-48b9-dd31-08d974fc488b X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2021 08:15:14.6812 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR04MB6048 Subject: [FFmpeg-devel] [PATCH v4 03/18] avcodec/avcodec: Remove AVSubtitleType, AVSubtitle and AVSubtitleRect from avcodec X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: TzW/n5IKe1IA Moved to libavutil/subfmt, include subfmt.h from avcodec.h Signed-off-by: softworkz --- libavcodec/ass.c | 2 +- libavcodec/ass.h | 6 +-- libavcodec/assdec.c | 2 +- libavcodec/assenc.c | 4 +- libavcodec/avcodec.c | 19 ---------- libavcodec/avcodec.h | 65 +------------------------------- libavcodec/dvbsubdec.c | 2 +- libavcodec/dvdsubdec.c | 2 +- libavcodec/dvdsubenc.c | 2 +- libavcodec/libzvbi-teletextdec.c | 14 +++---- libavcodec/movtextenc.c | 4 +- libavcodec/pgssubdec.c | 4 +- libavcodec/srtenc.c | 4 +- libavcodec/ttmlenc.c | 4 +- libavcodec/webvttenc.c | 4 +- libavcodec/xsubdec.c | 2 +- 16 files changed, 30 insertions(+), 110 deletions(-) diff --git a/libavcodec/ass.c b/libavcodec/ass.c index 907e2d7b88..fe8150d559 100644 --- a/libavcodec/ass.c +++ b/libavcodec/ass.c @@ -128,7 +128,7 @@ int ff_ass_add_rect(AVSubtitle *sub, const char *dialog, rects[sub->num_rects] = av_mallocz(sizeof(*rects[0])); if (!rects[sub->num_rects]) return AVERROR(ENOMEM); - rects[sub->num_rects]->type = SUBTITLE_ASS; + rects[sub->num_rects]->type = AV_SUBTITLE_FMT_ASS; ass_str = ff_ass_get_dialog(readorder, layer, style, speaker, dialog); if (!ass_str) return AVERROR(ENOMEM); diff --git a/libavcodec/ass.h b/libavcodec/ass.h index 2c260e4e78..e9d49628cc 100644 --- a/libavcodec/ass.h +++ b/libavcodec/ass.h @@ -48,7 +48,7 @@ typedef struct FFASSDecoderContext { } FFASSDecoderContext; /** - * Generate a suitable AVCodecContext.subtitle_header for SUBTITLE_ASS. + * Generate a suitable AVCodecContext.subtitle_header for AV_SUBTITLE_FMT_ASS. * Can specify all fields explicitly * * @param avctx pointer to the AVCodecContext @@ -76,7 +76,7 @@ int ff_ass_subtitle_header_full(AVCodecContext *avctx, int bold, int italic, int underline, int border_style, int alignment); /** - * Generate a suitable AVCodecContext.subtitle_header for SUBTITLE_ASS. + * Generate a suitable AVCodecContext.subtitle_header for AV_SUBTITLE_FMT_ASS. * * @param avctx pointer to the AVCodecContext * @param font name of the default font face to use @@ -97,7 +97,7 @@ int ff_ass_subtitle_header(AVCodecContext *avctx, int border_style, int alignment); /** - * Generate a suitable AVCodecContext.subtitle_header for SUBTITLE_ASS + * Generate a suitable AVCodecContext.subtitle_header for AV_SUBTITLE_FMT_ASS * with default style. * * @param avctx pointer to the AVCodecContext diff --git a/libavcodec/assdec.c b/libavcodec/assdec.c index 319279490c..fd80436eb2 100644 --- a/libavcodec/assdec.c +++ b/libavcodec/assdec.c @@ -54,7 +54,7 @@ static int ass_decode_frame(AVCodecContext *avctx, void *data, int *got_sub_ptr, if (!sub->rects[0]) return AVERROR(ENOMEM); sub->num_rects = 1; - sub->rects[0]->type = SUBTITLE_ASS; + sub->rects[0]->type = AV_SUBTITLE_FMT_ASS; sub->rects[0]->ass = av_strdup(avpkt->data); if (!sub->rects[0]->ass) return AVERROR(ENOMEM); diff --git a/libavcodec/assenc.c b/libavcodec/assenc.c index a6d107ded2..0e78414adb 100644 --- a/libavcodec/assenc.c +++ b/libavcodec/assenc.c @@ -48,8 +48,8 @@ static int ass_encode_frame(AVCodecContext *avctx, for (i=0; inum_rects; i++) { const char *ass = sub->rects[i]->ass; - if (sub->rects[i]->type != SUBTITLE_ASS) { - av_log(avctx, AV_LOG_ERROR, "Only SUBTITLE_ASS type supported.\n"); + if (sub->rects[i]->type != AV_SUBTITLE_FMT_ASS) { + av_log(avctx, AV_LOG_ERROR, "Only AV_SUBTITLE_FMT_ASS type supported.\n"); return AVERROR(EINVAL); } diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c index 2dd7dd84e0..963f52c4bd 100644 --- a/libavcodec/avcodec.c +++ b/libavcodec/avcodec.c @@ -426,25 +426,6 @@ void avcodec_flush_buffers(AVCodecContext *avctx) av_bsf_flush(avci->bsf); } -void avsubtitle_free(AVSubtitle *sub) -{ - int i; - - for (i = 0; i < sub->num_rects; i++) { - av_freep(&sub->rects[i]->data[0]); - av_freep(&sub->rects[i]->data[1]); - av_freep(&sub->rects[i]->data[2]); - av_freep(&sub->rects[i]->data[3]); - av_freep(&sub->rects[i]->text); - av_freep(&sub->rects[i]->ass); - av_freep(&sub->rects[i]); - } - - av_freep(&sub->rects); - - memset(sub, 0, sizeof(*sub)); -} - av_cold int avcodec_close(AVCodecContext *avctx) { int i; diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index ffd58c333f..b459c23ac7 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -35,6 +35,7 @@ #include "libavutil/frame.h" #include "libavutil/log.h" #include "libavutil/pixfmt.h" +#include "libavutil/subfmt.h" #include "libavutil/rational.h" #include "codec.h" @@ -1670,7 +1671,7 @@ typedef struct AVCodecContext { /** * Header containing style information for text subtitles. - * For SUBTITLE_ASS subtitle type, it should contain the whole ASS + * For AV_SUBTITLE_FMT_ASS subtitle type, it should contain the whole ASS * [Script Info] and [V4+ Styles] section, plus the [Events] line and * the Format line following. It shouldn't include any Dialogue line. * - encoding: Set/allocated/freed by user (before avcodec_open2()) @@ -2233,63 +2234,8 @@ typedef struct AVHWAccel { * @} */ -enum AVSubtitleType { - SUBTITLE_NONE, - - SUBTITLE_BITMAP, ///< A bitmap, pict will be set - - /** - * Plain text, the text field must be set by the decoder and is - * authoritative. ass and pict fields may contain approximations. - */ - SUBTITLE_TEXT, - - /** - * Formatted text, the ass field must be set by the decoder and is - * authoritative. pict and text fields may contain approximations. - */ - SUBTITLE_ASS, -}; - #define AV_SUBTITLE_FLAG_FORCED 0x00000001 -typedef struct AVSubtitleRect { - int x; ///< top left corner of pict, undefined when pict is not set - int y; ///< top left corner of pict, undefined when pict is not set - int w; ///< width of pict, undefined when pict is not set - int h; ///< height of pict, undefined when pict is not set - int nb_colors; ///< number of colors in pict, undefined when pict is not set - - /** - * data+linesize for the bitmap of this subtitle. - * Can be set for text/ass as well once they are rendered. - */ - uint8_t *data[4]; - int linesize[4]; - - enum AVSubtitleType type; - - char *text; ///< 0 terminated plain UTF-8 text - - /** - * 0 terminated ASS/SSA compatible event line. - * The presentation of this is unaffected by the other values in this - * struct. - */ - char *ass; - - int flags; -} AVSubtitleRect; - -typedef struct AVSubtitle { - uint16_t format; /* 0 = graphics */ - uint32_t start_display_time; /* relative to packet pts, in ms */ - uint32_t end_display_time; /* relative to packet pts, in ms */ - unsigned num_rects; - AVSubtitleRect **rects; - int64_t pts; ///< Same as packet pts, in AV_TIME_BASE -} AVSubtitle; - /** * Return the LIBAVCODEC_VERSION_INT constant. */ @@ -2425,13 +2371,6 @@ int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **op */ int avcodec_close(AVCodecContext *avctx); -/** - * Free all allocated data in the given subtitle struct. - * - * @param sub AVSubtitle to free. - */ -void avsubtitle_free(AVSubtitle *sub); - /** * @} */ diff --git a/libavcodec/dvbsubdec.c b/libavcodec/dvbsubdec.c index e45c14e878..1e13d784bb 100644 --- a/libavcodec/dvbsubdec.c +++ b/libavcodec/dvbsubdec.c @@ -795,7 +795,7 @@ static int save_subtitle_set(AVCodecContext *avctx, AVSubtitle *sub, int *got_ou rect->w = region->width; rect->h = region->height; rect->nb_colors = (1 << region->depth); - rect->type = SUBTITLE_BITMAP; + rect->type = AV_SUBTITLE_FMT_BITMAP; rect->linesize[0] = region->width; clut = get_clut(ctx, region->clut); diff --git a/libavcodec/dvdsubdec.c b/libavcodec/dvdsubdec.c index 52259f0730..b39b3d1838 100644 --- a/libavcodec/dvdsubdec.c +++ b/libavcodec/dvdsubdec.c @@ -406,7 +406,7 @@ static int decode_dvd_subtitles(DVDSubContext *ctx, AVSubtitle *sub_header, sub_header->rects[0]->y = y1; sub_header->rects[0]->w = w; sub_header->rects[0]->h = h; - sub_header->rects[0]->type = SUBTITLE_BITMAP; + sub_header->rects[0]->type = AV_SUBTITLE_FMT_BITMAP; sub_header->rects[0]->linesize[0] = w; sub_header->rects[0]->flags = is_menu ? AV_SUBTITLE_FLAG_FORCED : 0; } diff --git a/libavcodec/dvdsubenc.c b/libavcodec/dvdsubenc.c index ff4fbed39d..943a7466d9 100644 --- a/libavcodec/dvdsubenc.c +++ b/libavcodec/dvdsubenc.c @@ -268,7 +268,7 @@ static int encode_dvd_subtitles(AVCodecContext *avctx, if (rects == 0 || !h->rects) return AVERROR(EINVAL); for (i = 0; i < rects; i++) - if (h->rects[i]->type != SUBTITLE_BITMAP) { + if (h->rects[i]->type != AV_SUBTITLE_FMT_BITMAP) { av_log(avctx, AV_LOG_ERROR, "Bitmap subtitle required\n"); return AVERROR(EINVAL); } diff --git a/libavcodec/libzvbi-teletextdec.c b/libavcodec/libzvbi-teletextdec.c index 1073d6a0bd..995648c9ec 100644 --- a/libavcodec/libzvbi-teletextdec.c +++ b/libavcodec/libzvbi-teletextdec.c @@ -215,7 +215,7 @@ static int gen_sub_text(TeletextContext *ctx, AVSubtitleRect *sub_rect, vbi_page } if (buf.len) { - sub_rect->type = SUBTITLE_ASS; + sub_rect->type = AV_SUBTITLE_FMT_ASS; sub_rect->ass = create_ass_text(ctx, buf.str); if (!sub_rect->ass) { @@ -224,7 +224,7 @@ static int gen_sub_text(TeletextContext *ctx, AVSubtitleRect *sub_rect, vbi_page } av_log(ctx, AV_LOG_DEBUG, "subtext:%s:txetbus\n", sub_rect->ass); } else { - sub_rect->type = SUBTITLE_NONE; + sub_rect->type = AV_SUBTITLE_FMT_NONE; } av_bprint_finalize(&buf, NULL); return 0; @@ -393,7 +393,7 @@ static int gen_sub_ass(TeletextContext *ctx, AVSubtitleRect *sub_rect, vbi_page } if (buf.len) { - sub_rect->type = SUBTITLE_ASS; + sub_rect->type = AV_SUBTITLE_FMT_ASS; sub_rect->ass = ff_ass_get_dialog(ctx->readorder++, 0, is_subtitle_page ? "Subtitle" : "Teletext", NULL, buf.str); if (!sub_rect->ass) { @@ -402,7 +402,7 @@ static int gen_sub_ass(TeletextContext *ctx, AVSubtitleRect *sub_rect, vbi_page } av_log(ctx, AV_LOG_DEBUG, "subtext:%s:txetbus\n", sub_rect->ass); } else { - sub_rect->type = SUBTITLE_NONE; + sub_rect->type = AV_SUBTITLE_FMT_NONE; } av_bprint_finalize(&buf, NULL); return 0; @@ -462,7 +462,7 @@ static int gen_sub_bitmap(TeletextContext *ctx, AVSubtitleRect *sub_rect, vbi_pa if (vc >= vcend) { av_log(ctx, AV_LOG_DEBUG, "dropping empty page %3x\n", page->pgno); - sub_rect->type = SUBTITLE_NONE; + sub_rect->type = AV_SUBTITLE_FMT_NONE; return 0; } @@ -500,7 +500,7 @@ static int gen_sub_bitmap(TeletextContext *ctx, AVSubtitleRect *sub_rect, vbi_pa } ((uint32_t *)sub_rect->data[1])[VBI_TRANSPARENT_BLACK] = RGBA(0, 0, 0, 0); ((uint32_t *)sub_rect->data[1])[VBI_TRANSPARENT_BLACK + VBI_NB_COLORS] = RGBA(0, 0, 0, 0); - sub_rect->type = SUBTITLE_BITMAP; + sub_rect->type = AV_SUBTITLE_FMT_BITMAP; return 0; } @@ -695,7 +695,7 @@ static int teletext_decode_frame(AVCodecContext *avctx, void *data, int *got_sub sub->num_rects = 0; sub->pts = ctx->pages->pts; - if (ctx->pages->sub_rect->type != SUBTITLE_NONE) { + if (ctx->pages->sub_rect->type != AV_SUBTITLE_FMT_NONE) { sub->rects = av_malloc(sizeof(*sub->rects)); if (sub->rects) { sub->num_rects = 1; diff --git a/libavcodec/movtextenc.c b/libavcodec/movtextenc.c index 2ae5a9bf0b..a4a963a9f2 100644 --- a/libavcodec/movtextenc.c +++ b/libavcodec/movtextenc.c @@ -649,8 +649,8 @@ static int mov_text_encode_frame(AVCodecContext *avctx, unsigned char *buf, for (i = 0; i < sub->num_rects; i++) { const char *ass = sub->rects[i]->ass; - if (sub->rects[i]->type != SUBTITLE_ASS) { - av_log(avctx, AV_LOG_ERROR, "Only SUBTITLE_ASS type supported.\n"); + if (sub->rects[i]->type != AV_SUBTITLE_FMT_ASS) { + av_log(avctx, AV_LOG_ERROR, "Only AV_SUBTITLE_FMT_ASS type supported.\n"); return AVERROR(EINVAL); } diff --git a/libavcodec/pgssubdec.c b/libavcodec/pgssubdec.c index 55eda4c2a9..ef4778cd1b 100644 --- a/libavcodec/pgssubdec.c +++ b/libavcodec/pgssubdec.c @@ -513,7 +513,7 @@ static int display_end_segment(AVCodecContext *avctx, void *data, // is defined by the start of the next sub which may contain no // objects (i.e. clears the previous sub) sub->end_display_time = UINT32_MAX; - sub->format = 0; + sub->format = AV_SUBTITLE_FMT_BITMAP; // Blank if last object_count was 0. if (!ctx->presentation.object_count) @@ -539,7 +539,7 @@ static int display_end_segment(AVCodecContext *avctx, void *data, return AVERROR(ENOMEM); } sub->num_rects++; - sub->rects[i]->type = SUBTITLE_BITMAP; + sub->rects[i]->type = AV_SUBTITLE_FMT_BITMAP; /* Process bitmap */ object = find_object(ctx->presentation.objects[i].id, &ctx->objects); diff --git a/libavcodec/srtenc.c b/libavcodec/srtenc.c index 2e3ac55770..9a550b9e23 100644 --- a/libavcodec/srtenc.c +++ b/libavcodec/srtenc.c @@ -240,8 +240,8 @@ static int encode_frame(AVCodecContext *avctx, for (i=0; inum_rects; i++) { const char *ass = sub->rects[i]->ass; - if (sub->rects[i]->type != SUBTITLE_ASS) { - av_log(avctx, AV_LOG_ERROR, "Only SUBTITLE_ASS type supported.\n"); + if (sub->rects[i]->type != AV_SUBTITLE_FMT_ASS) { + av_log(avctx, AV_LOG_ERROR, "Only AV_SUBTITLE_FMT_ASS type supported.\n"); return AVERROR(EINVAL); } diff --git a/libavcodec/ttmlenc.c b/libavcodec/ttmlenc.c index ad2eddfdd5..891b4f496f 100644 --- a/libavcodec/ttmlenc.c +++ b/libavcodec/ttmlenc.c @@ -90,8 +90,8 @@ static int ttml_encode_frame(AVCodecContext *avctx, uint8_t *buf, const char *ass = sub->rects[i]->ass; int ret; - if (sub->rects[i]->type != SUBTITLE_ASS) { - av_log(avctx, AV_LOG_ERROR, "Only SUBTITLE_ASS type supported.\n"); + if (sub->rects[i]->type != AV_SUBTITLE_FMT_ASS) { + av_log(avctx, AV_LOG_ERROR, "Only AV_SUBTITLE_FMT_ASS type supported.\n"); return AVERROR(EINVAL); } diff --git a/libavcodec/webvttenc.c b/libavcodec/webvttenc.c index 89b49e42bf..23ad6c32d3 100644 --- a/libavcodec/webvttenc.c +++ b/libavcodec/webvttenc.c @@ -167,8 +167,8 @@ static int webvtt_encode_frame(AVCodecContext *avctx, for (i=0; inum_rects; i++) { const char *ass = sub->rects[i]->ass; - if (sub->rects[i]->type != SUBTITLE_ASS) { - av_log(avctx, AV_LOG_ERROR, "Only SUBTITLE_ASS type supported.\n"); + if (sub->rects[i]->type != AV_SUBTITLE_FMT_ASS) { + av_log(avctx, AV_LOG_ERROR, "Only AV_SUBTITLE_FMT_ASS type supported.\n"); return AVERROR(EINVAL); } diff --git a/libavcodec/xsubdec.c b/libavcodec/xsubdec.c index 979399bae6..5c9e65f737 100644 --- a/libavcodec/xsubdec.c +++ b/libavcodec/xsubdec.c @@ -107,7 +107,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_sub_ptr, } sub->rects[0]->x = x; sub->rects[0]->y = y; sub->rects[0]->w = w; sub->rects[0]->h = h; - sub->rects[0]->type = SUBTITLE_BITMAP; + sub->rects[0]->type = AV_SUBTITLE_FMT_BITMAP; sub->rects[0]->linesize[0] = w; sub->rects[0]->data[0] = av_malloc(w * h); sub->rects[0]->nb_colors = 4; From patchwork Sat Sep 11 08:16:33 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Soft Works X-Patchwork-Id: 30133 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2a4a:0:0:0:0 with SMTP id k10csp2236520iov; Sat, 11 Sep 2021 01:16:46 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzu2CtJCmiRUoQKiH5FBZDmxvseEMSU+7l3YNXYl/K0zva99vtCwPAta9p5Cd0QpLbpIWKI X-Received: by 2002:a05:6402:84e:: with SMTP id b14mr2200758edz.260.1631348206044; Sat, 11 Sep 2021 01:16:46 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id l19si1166262eda.351.2021.09.11.01.16.45; Sat, 11 Sep 2021 01:16:46 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@hotmail.com header.s=selector1 header.b=ng1zMZSK; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=hotmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E2A6068A609; Sat, 11 Sep 2021 11:16:43 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11olkn2038.outbound.protection.outlook.com [40.92.18.38]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 58021680157 for ; Sat, 11 Sep 2021 11:16:36 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WQVu+fIczjBQi1nUYINs0gpO2MYZBJkM6/3wLUy3l/UUxql5YiRdbC2+xxZVF3AHw6CkA1U8WQUj8jLW+NsREfBGQKMI5RIP8t5WEjSZ42TbY8V4YL+9fTbn4jDZbupmFwLvhj01KVi15uibABYopK+Eq1qPA62RKv73VV+/oT5I9H997GAMJrr+wf1Nu5AdQZ9QMo57eTdAx4gErr0NbjypJgzXcrwXMgxPZ2/i1ua8qeqmMutxgQzEiuMbcF9Lixszu9cu+MUQnCfjiN8pvLeM5hPnI1ik7njR56qlHHuuCVio9O2lbu183WJ0+vjssCOl0g9wSuILSU+QCgRD3w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=LY3xvQ12ydnilGfJMkD/VgtzbP5YRIXrepSQkYvOK7o=; b=nS8hSKeezbNT7Gl5NzQAns/gUNqc/eOe4rujplGRymjgBkb7buxPh4gR/I+7+4ZFIm4ASb2HMre3Qrn2WLLpmCJZQSbmkGf2nAwi+VipcJLli1iGKXeCjjValvbpdgYINPp/f/N1SmAR8qALzSlIeubzkuSKN5A5lCwFZW8BwnTKkQH3K09wJ37UwsX2mU/CPXtxmDJ9x60itkHk/ikTbz5lCjWXxqlJmul23Tqu/1X8Ww0Hw1WVAKEgXe6ME1ZmIDJZxCGLTxqzTS1YYf0ReLsvFk8d+B6TrA5/3WWu/ooVfTm7u8ZQIpmYSm6KpLWTMnn2+ACsvijpY1BPcwkEnA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LY3xvQ12ydnilGfJMkD/VgtzbP5YRIXrepSQkYvOK7o=; b=ng1zMZSK9HDxBGDEqjxdnTN/gb+SUSqoeN1GEpGw7y7dSPqEXCtC7pjuKpLINBC+TN+odDyYWnQuo/Sr3JqyK1KfThYGdCVZYwuh9azjcYE7zbeja98E2hUq3jF0Lp+qBgUkLWESVSKrlqJtmwoMyUMPEXlsIrFbdSgrr1uPHzGT3hCrMYjySjINu52e/u9rC4AjMMVgymkrSd42wKOGmlEGD5Qe9Ee69XPR0Od+2O9in1WS+jB9XEXRPYoQhnB/c1SHn0gFj04mqOJlbeli+Tkio/YJRUgNR/i4gKvLR5JAfPbbizuPaNz2NURF8Zeht6izA5HYF0jFx2gRk0UnRQ== Received: from MN2PR04MB5981.namprd04.prod.outlook.com (2603:10b6:208:da::10) by MN2PR04MB6048.namprd04.prod.outlook.com (2603:10b6:208:e5::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4500.16; Sat, 11 Sep 2021 08:16:33 +0000 Received: from MN2PR04MB5981.namprd04.prod.outlook.com ([fe80::ecfe:2528:2012:22cb]) by MN2PR04MB5981.namprd04.prod.outlook.com ([fe80::ecfe:2528:2012:22cb%5]) with mapi id 15.20.4500.018; Sat, 11 Sep 2021 08:16:33 +0000 From: Soft Works To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH v4 04/18] avcodec/avcodec: Add av_get_subtitle_format_from_codecdesc function Thread-Index: AdemwWL3huWVxInHQoioIv2ItLICsg== Date: Sat, 11 Sep 2021 08:16:33 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [mKZW7uYnD1HRVKuRfFEXmczltaSRB24hNmJJcMFdQns=] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 904d4331-ec15-487a-03db-08d974fc778b x-ms-traffictypediagnostic: MN2PR04MB6048: x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: PvU90SFbGIH6o4rRdTIIGEFCJc3fiNq4/BraXS7zpQYdcEw89ulK9xmVhjkkIZ0nRRA0igk6/nsCdr3PhUMX58wffVkbfb2ZqhpzwZ38hbNmOYqboKDM1L6YQUhWnDbSnn5TNjGV75YGNIzoEjfXGQ3SmWAtVXqwy2su6N0D3IY2ESo0fa6fsCWfvB1+e8WnpkRS5rXqZolCxjxI9G3FoJ1Aj6UAgETWwnyKos59Jqnzp3aoy9MZpkcg6YJnIb6IepMY6n0DSpflvXajrku73e3xWYdhbGVh24lz3v2FI64KUjB+InDXfD5DX6oX2QeE6WJvi7Ff/y3DSbhytycvncKnjREzptj4GuuWn8o9KUPWL64N0JLggMk8z4NZJ0soY8n0eFCSK+c62WzPF5vpeUihztJ4O9wsKm8xi2dcUWaF2j7x3U6ezejVT95oiDJM x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: T7GkB8/6fk8eS/BA7TnTQZAnPXwhh1XhfXXoyPGVsTZGcjbvZL8ENLviGrLT8L6CmydZ/bnPq6x8xEHsqmJkYaDRH4YwOTLLVT7L2QFhDDuMrTtn/YlpaRZP5lWVwzHJv8dMfLyFfYb7+fwcVuhk6A== x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-3174-20-msonline-outlook-529c7.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR04MB5981.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 904d4331-ec15-487a-03db-08d974fc778b X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2021 08:16:33.4816 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR04MB6048 Subject: [FFmpeg-devel] [PATCH v4 04/18] avcodec/avcodec: Add av_get_subtitle_format_from_codecdesc function X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: IICRRunukXUg Introduce a single place for deriving an AVSubtitleType from AV_CODEC_PROP_xxx Signed-off-by: softworkz --- libavcodec/avcodec.h | 8 ++++++++ libavcodec/decode.c | 5 +---- libavcodec/utils.c | 11 +++++++++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index b459c23ac7..0f71b42d61 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -3059,6 +3059,14 @@ void avcodec_flush_buffers(AVCodecContext *avctx); */ int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes); +/** + * Return subtitle format from a codec descriptor + * + * @param codec_descriptor codec descriptor + * @return the subtitle type (e.g. bitmap, text) + */ +enum AVSubtitleType av_get_subtitle_format_from_codecdesc(const AVCodecDescriptor *codec_descriptor); + /* memory */ /** diff --git a/libavcodec/decode.c b/libavcodec/decode.c index 643f9d6a30..dfec9711ed 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -841,10 +841,7 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, avctx->pkt_timebase, ms); } - if (avctx->codec_descriptor->props & AV_CODEC_PROP_BITMAP_SUB) - sub->format = 0; - else if (avctx->codec_descriptor->props & AV_CODEC_PROP_TEXT_SUB) - sub->format = 1; + sub->format = av_get_subtitle_format_from_codecdesc(avctx->codec_descriptor); for (unsigned i = 0; i < sub->num_rects; i++) { if (avctx->sub_charenc_mode != FF_SUB_CHARENC_MODE_IGNORE && diff --git a/libavcodec/utils.c b/libavcodec/utils.c index cfc07cbcb8..767dfabd1e 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -818,6 +818,17 @@ int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes) return FFMAX(0, duration); } +enum AVSubtitleType av_get_subtitle_format_from_codecdesc(const AVCodecDescriptor *codec_descriptor) +{ + if(codec_descriptor->props & AV_CODEC_PROP_BITMAP_SUB) + return AV_SUBTITLE_FMT_BITMAP; + + if(codec_descriptor->props & AV_CODEC_PROP_TEXT_SUB) + return AV_SUBTITLE_FMT_ASS; + + return AV_SUBTITLE_FMT_UNKNOWN; +} + int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes) { int duration = get_audio_frame_duration(par->codec_id, par->sample_rate, From patchwork Sat Sep 11 08:18:02 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Soft Works X-Patchwork-Id: 30131 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2a4a:0:0:0:0 with SMTP id k10csp2237339iov; Sat, 11 Sep 2021 01:18:14 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzlD5sd5T9/hjyHC2tBQCLkFxBZel4wPBlaRh9DNqzEOwBcFrCJSKUzLB7fQg9OWgH+hRqt X-Received: by 2002:a17:906:38e:: with SMTP id b14mr208757eja.229.1631348294152; Sat, 11 Sep 2021 01:18:14 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id e10si1607970edj.222.2021.09.11.01.18.13; Sat, 11 Sep 2021 01:18:14 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@hotmail.com header.s=selector1 header.b=jgmoygYc; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=hotmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 07CCD68A62F; Sat, 11 Sep 2021 11:18:12 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1anam02olkn2107.outbound.protection.outlook.com [40.92.44.107]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6AAA2687F17 for ; Sat, 11 Sep 2021 11:18:05 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MySW+5mQ+d3fJUi9VU2tlhCwnwPEjxFaRM5vcU0VcLeyZEH4xqj58q3UvLhrMJZ5BqgqPzFbCNRn3OTNYQxbrViKJNZ+DCHidy0bTyQZKMcFMHZmj0vgyDhfh5gVliGAQaEY+mffz+Y5WqhoeBYNHkrB95kqqXPGJGCAJANzjOTGV5GcEakAnLnupc/cJ23gGInnCPWRE+TTnJNnPcfWZc4XB80DkEcbtmR1u1svNkrad9XzX/zDkLvMHkzNMqr9HMT70v3lIigJm5/AupzqB19vJtpZ+7EOVBUpSfGvqS5iQ31BJk2YiqF9U0hfLjIBKtD3rGxsXG5kPVDHg9eZ/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=zAf3Wew/OswdJdb61QC5PueC4riWpo5NevDDOlFCxes=; b=BQRYzvZwt1b/7zklj7+G26MxCrJrX0Ub+Qb/w+XrLk74Oz6cdR4qeQG1O4H4DCIu5wa91YCEZRHvz0E6p/Q70RV8H4zQQk1dedjQMOhseXH3+uNMiyC2yspF3H0q/uueAysPOH8Eq3Wa/oF/kBV732lrYnFbHP1ZfBWY0nYRZj9E3dr9YZepWfQAicvBJdhni1eTc+dF8J0ghtr+192baUWQqWpD2EOX9bvNqIIP+T6gUByfRL8GChNw3Bw+y3hVjZx1kJgg/Xnx2m9czMkCoWlzOTp8nW6UKL/v8Ziq5AP0Ai3E9lNXnnJBOhH99n716jdtR+pRta2SzPoIOJ/gvg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zAf3Wew/OswdJdb61QC5PueC4riWpo5NevDDOlFCxes=; b=jgmoygYcnkJGBKaMGpbQtVVvlGz+lhhZ6Pvn9/StK2lfebQDcPhN9inC3JfFbLfh+EMSMkh5KnXJeQwmaLoSKDr9Uhl92hFMLObExC2Tz5L1uDU/NsHmRY3awiDB0eG5LTGTm2TeoL+t8q627lTCnbUD/gBbGQpnr+O9nB8RNpmsbbsuR6s90LNUqHnAY+xiEETwhjqCjtRiqNFIWLdEcMGJpZ4gnFqN1aanCsvBLtFpMig2nBTedUf6nLkvcEDs2NjXNdTQy7qxqPgedXBsePAeMqSNghFCFL+iJHDCrIuzmSNfRbddi8xac1y36JWy4cDllWPxOmq8yGW7D1bIDw== Received: from MN2PR04MB5981.namprd04.prod.outlook.com (2603:10b6:208:da::10) by MN2PR04MB6048.namprd04.prod.outlook.com (2603:10b6:208:e5::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4500.16; Sat, 11 Sep 2021 08:18:03 +0000 Received: from MN2PR04MB5981.namprd04.prod.outlook.com ([fe80::ecfe:2528:2012:22cb]) by MN2PR04MB5981.namprd04.prod.outlook.com ([fe80::ecfe:2528:2012:22cb%5]) with mapi id 15.20.4500.018; Sat, 11 Sep 2021 08:18:03 +0000 From: Soft Works To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [PATCH v4 05/18] avcodec/avcodec: Remove sub_text_format parameter Thread-Index: AdemtA1o+D+dAr6+QWmZuV7w06DPvQ== Date: Sat, 11 Sep 2021 08:18:02 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [AlawPaCZh6Wdym+iceOSpiinxxA98gNN8H7jwXLRRGI=] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 1ff3c6bd-2870-45d9-68c1-08d974fcacdf x-ms-traffictypediagnostic: MN2PR04MB6048: x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: mbJAcopY16t76brQxOHVApfxufkOV7ZQ+O2XXKrOoYMJNzDGEPcdMEmFYochNvrdg4fgWlAyloqF19TVPxpOP7QxvEinGy+KmUVXIVxQcXtLPvHl5OZduxmNFf52XqQauu6X9YgMSUEyk5MLH2H20G/n750jfdFQVY1Jj4bS94ZNQBBhVFIygaAxC342ymB1dvnTq0f6yI9iA3DAT6QlBcAMgbzHDzkNLgJROauQbaESXsYRIqGUL3ua0WZO0ZYevD0uvvKHq+RQ+h8Q7bsEyxVziW2t22DXy2+2WSZdQslt2Tp3LSG0Ei9FsBDb+ET17N5YYru41ZYYuKbIKcGuMhQ6NQeh00AfKBFgHAdFI8TOuHry3IOcvrhNCI45XrZLXjJymkp2VpGMatqoGCGmwjFY0lGuHga4HdcaCkKRkVCmBzz9kn4+lVkK6bsRtXsT x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: XDUG+8aB/fERO3JUADP28ruf0elYQm8foScK6PVp7Inz95CWP+HHHwefuMwtdzq0Nhus1dWWk+oJMSlltbxj3iKYevPtg1zUb8esCpR8EE3+pVjzQXZnVsJYQyuuc092Mzj7cGjl0HaHVWCIvme9hA== x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-3174-20-msonline-outlook-529c7.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR04MB5981.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 1ff3c6bd-2870-45d9-68c1-08d974fcacdf X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2021 08:18:02.9599 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR04MB6048 Subject: [FFmpeg-devel] [PATCH v4 05/18] avcodec/avcodec: Remove sub_text_format parameter X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: YQd46N8ga4Nv It has never been used and going forward, there's no perspective that it would ever be. Signed-off-by: softworkz --- libavcodec/avcodec.h | 8 -------- libavcodec/options_table.h | 2 -- libavcodec/version.h | 4 ++-- 3 files changed, 2 insertions(+), 12 deletions(-) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 0f71b42d61..01c881e6d1 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -1854,14 +1854,6 @@ typedef struct AVCodecContext { */ AVBufferRef *hw_frames_ctx; - /** - * Control the form of AVSubtitle.rects[N]->ass - * - decoding: set by user - * - encoding: unused - */ - int sub_text_format; -#define FF_SUB_TEXT_FMT_ASS 0 - /** * Audio only. The amount of padding (in samples) appended by the encoder to * the end of the audio. I.e. this number of decoded samples must be diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h index ae42b65b7b..8a61154653 100644 --- a/libavcodec/options_table.h +++ b/libavcodec/options_table.h @@ -366,8 +366,6 @@ static const AVOption avcodec_options[] = { {"auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_AUTOMATIC}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"}, {"pre_decoder", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_PRE_DECODER}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"}, {"ignore", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_IGNORE}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"}, -{"sub_text_format", "set decoded text subtitle format", OFFSET(sub_text_format), AV_OPT_TYPE_INT, {.i64 = FF_SUB_TEXT_FMT_ASS}, 0, 1, S|D, "sub_text_format"}, -{"ass", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_TEXT_FMT_ASS}, INT_MIN, INT_MAX, S|D, "sub_text_format"}, {"apply_cropping", NULL, OFFSET(apply_cropping), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, V | D }, {"skip_alpha", "Skip processing alpha", OFFSET(skip_alpha), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, V|D }, {"field_order", "Field order", OFFSET(field_order), AV_OPT_TYPE_INT, {.i64 = AV_FIELD_UNKNOWN }, 0, 5, V|D|E, "field_order" }, diff --git a/libavcodec/version.h b/libavcodec/version.h index 4b4fe543ab..0fa5b1a72a 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -28,8 +28,8 @@ #include "libavutil/version.h" #define LIBAVCODEC_VERSION_MAJOR 59 -#define LIBAVCODEC_VERSION_MINOR 7 -#define LIBAVCODEC_VERSION_MICRO 103 +#define LIBAVCODEC_VERSION_MINOR 8 +#define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \