From patchwork Mon Apr 29 21:14:22 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 48398 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:1509:b0:1a9:af23:56c1 with SMTP id nq9csp2272308pzb; Mon, 29 Apr 2024 14:19:10 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWZxj7Q7/PM7shMKifdBGVkS0xwPQvexbYtyO2oNXkiYBPZoo84m0PZgwXot96oF86Y1qUfC1d8JvJcb1N1ybcv70OVj65MiTE8zA== X-Google-Smtp-Source: AGHT+IEoKzUDJmzrE/YsjHZM5E27Cuqk4Va/vvrStSOKzfCxQM37WcFBukadKfncaj8aZ1GqaBfm X-Received: by 2002:a05:6512:447:b0:518:b180:3f94 with SMTP id y7-20020a056512044700b00518b1803f94mr6578614lfk.2.1714425550152; Mon, 29 Apr 2024 14:19:10 -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 du21-20020a17090772d500b00a58fa9a0ce1si2106633ejc.64.2024.04.29.14.19.09; Mon, 29 Apr 2024 14:19:10 -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=@outlook.com header.s=selector1 header.b=KFvW3OxU; 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=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 314E468D5BD; Tue, 30 Apr 2024 00:16:32 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04olkn2065.outbound.protection.outlook.com [40.92.73.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8744C68D5BA for ; Tue, 30 Apr 2024 00:16:30 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jV/SmXdLcuhk6PM+O7fDS7gRtzw3+eTfxCPfuFGJJNvKD4MMltIPG1B6GCfzUWQPejjTFbsw5GP2oif4wIecAqmFatxLVuU0xzz+w713cf+vA43fdORB79cy6wWJhJScOr6AJm4RwID+iD8njh5YJ5nBbggTy+I8XyoqB7thhIQfwFbbgtb68CumquhWmx6liX940eWqe/ZBqpD7ennZHoUW+Lf1uQ5cIAZA3Dw6ZjUr1hjASGIO/DESWcUuoyn4Jp5cqpUWYC6Oxg3X3eZFWHIXvipAq51xCNXNZGkhzGaBqZ5u4ZOSuteHU2fkZ6kK/KNDGpssUEbPNlznbkIaDA== 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:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=tgF2CQiDO/ubuDomyjuWeB8fAFeEQLkT4rlvocJXw7Y=; b=LLt4Dy/rRFGfqA7YB68rohwvcfhPCbg3J11BJfOYZdwJ72ID16mGmvECM+UV5ehY1Jef9GCi6mKJsKXB1F4gihd3hAotqY3fpo4IaPPt83Wh3v0OOLI6aeD8W2FMEBPdUxDgomtpwiqXPQgd+1UmMNzokH8UvaBV3D52SYUttM8f2nrEJhj1ApccGuDadJ56TOKZCsx3+G8Uwjv+zrUkPuYwaorY03oAHMKagtJVbzLl8SNF+JNtEZzixy9uYjGG1odUmYqQwAMi4CrqoyaPGjuRtIVTYVI7LijLhOXtOCWHBjikJAd1d9J281NNeeRfQaUB6bR6LK+brqj2HyZc7Q== 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=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tgF2CQiDO/ubuDomyjuWeB8fAFeEQLkT4rlvocJXw7Y=; b=KFvW3OxUDbRPEQZsfbAw+XW6f3YoVRr/xX8CD85C8eDOi5bD+sRZyI2mAXcddBil/5se7HVXSLWQEqNVqCLrxbKIZNvPLZ4qJSMeFJ+ET4KFjQK8yxkhJOlvn3wayWeY1lMvh0gu4DD2DuyMAjcAGsgX0Cil987GvtON5xZnSGgOwjq5n5LxTIEz779fPb/nDyT3igg0zUNGIpDFEFCLa8jA/xIiznnnIr8Wbw0/KZlR63giLNqj+bCTKryD35DdxK+s5C/Y2IvInWEN6NZWcEEZG/6YcGUB/lMFDDNJhmAvqCwe2h3Cv+RXZCiMGYK6EHSFeEz3ZhDwgRqXksmiDg== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by GVXP250MB1057.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:1b5::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7519.34; Mon, 29 Apr 2024 21:16:28 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::1f29:8206:b8c3:45bb]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::1f29:8206:b8c3:45bb%3]) with mapi id 15.20.7519.031; Mon, 29 Apr 2024 21:16:28 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 29 Apr 2024 23:14:22 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [5XYftp9x0CtQyy4Ynhgzi3wACQPEnot0aHoO6kOHACk=] X-ClientProxiedBy: ZR0P278CA0199.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:6a::21) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20240429211438.3274834-27-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|GVXP250MB1057:EE_ X-MS-Office365-Filtering-Correlation-Id: b3a9faab-d31f-4939-49f5-08dc6891a259 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199019|440099019|3412199016|1710799017; X-Microsoft-Antispam-Message-Info: oWiO5oZIqzZnWgunSTZdIdr/xC80OHJ8k57SDR+3EWzdx7r7W8dX9fKkxchumMkqdXHCmRp8ZqddnITHoAxkES6JQKmmenqosNV/ReahPheeENHxVB8t4eL0ZMPpHAlOv55SodRLwbMhGJFALUMg+xW8tROT5EkQAQ/S61Xy8tc7+6SLv9jYR6R2HBnJfqFMQG+NC/O6sBxML5f0OlGQncOS34DpnHNvU/9SutEZ/iPMvaLWQtvEZTgRiMyCM9ZXFCzuX4dBDsHb/XmWNWDmJt4earAzBO7HtdG8q6dx3jO4//oQhqSPyCkpkKWtS2dl+k/6JEejYeoizvzYcy6W9bv51SgRrFtsvBUhE1fp+9ikgIWq4PF+LLO4hIbGe1sbQ8DpZfL/qep+bxGZdBntvcg8DqakbQjk2lXdUR3bXZxYt8+Zv7G8W6/C1o7wUZ1QHTENfy4I+xKTCCaUJXQoMqHdmH8nhpT/2etgbI12fz/Hx1WpzahmfhNpOjTEBvz8sVRov5LrSAhHZ+HiTmX81O1KHnQ3f5A9TrlLAmT3z2L+KzUT9TFUadWMefw11y/Rh+Dq1hKvKT251wKy9gPOidTpSEUG3YXCz94d//bKTlVRGRfC4oLJW5jwX6ipcfnH X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 10sq8gg/hiyz92DFEMtyNI2I0580N3UqysRNj6qHOgsBYvorUJMS/OvBwahPtlhvQwCkcDNaUrjxUfcQMU5KD2EWzAn3jem5OAxbE1V83dYem7tNomWD25Cxi+BCgr9z2Rt9KT0hosHeSR0ep15D/X0Vos5lmU1c1MBIfypoJ41vewBfNfoqkuhReSJ4b07Fi1IzTlItWF2mrEes4BlO/vqjH0DeH4jrs8dgcaD5c894b/qIcyzz24LMox7QzEhbH0oEbsevhaeH+xcELYWu8i3oEcWiSPG04em4HVuMk0ffsn4cOc5VLKrjVCdFws0fkaWM7C0Mtc5aaqwP+GdqsuCMKQYR/JxKis5oJAZkvC1zGsY7SqBoj+vGAykAmDWFlJ5FYC3qg2UJalEsx4YotY+0bzd6WYFrh1qDlOxE9u0WaarmO7JYZQ10+w48QBXM/I7iwVUHRq9Eb8OtwaL+HXSyftPf6ZAf0T5+IVIQ+4fWbNAwy2SGA1j2HgmJCaBfdl8cFzz09pIbXGeU+OwhKDyWR+MaF1afcDUtE9mzsNEwOMhTkEjBGhfOjJ6N1dRiHghyDDMDEInzW8OxYwnX0WICGC0jqhrz1Q1iORUAhLFkjQgpB9x23X+rIh6P+g0KK46fbPTMfWNF4x36W3wPqkUwhFtJst8MrZuF5l0k9y2ed29btGcH6B9Lwp2Ny2zPoPi5fO3sWVMLMKOITYyyRzaOrkFJKLMsos5Q6hqKCW9/OEchoiIiIOxc8oJ60czkkGJaZLZHWZlplMFxwWk7v8XqBXpgiJmto2SMgvrqtkbjyRX+vmm4937VHfW+RqvFVavpElXv9HtSyZ9jVSKnUJQq8Ms+uiu9RNW25pvtysLSAvqBnzp/eJL+TXRCCzibL67SPYKUYw9G2jBpUoEhjtGaHASYzYCe9GHvjo+HiXUhKNLJQePse4QCdAc09zU715UwXyPBf4eDuDLQQGdxYaEIzk1zvLML9UdbI7n83YvkjwWcvs3mBYAgo7myUQceu9C9vcz4v6w0aatqBWm+Ig5ppKtsh4ZHwdasLfvoLsnAYxSQjSvgMGDu7HZV1zEuw8JlZSAntytNgTKvDvYirBNe8x5dr15eG8Us1vLgWAcUUWRTbakYYwgtx0QBVCJlhV2jRwCxWPgqUrnyJviIUeBK0lGzif1WW0sYeSQTG+uQ/X2j5+hCIpgTyOyDV5QobZngjlvqsOjl2VJ2+rxZ1rXJlhUozcN8OhD5V5zX9y85xelDTONSjWyJF6C1lYe/jPJ0XnXV94Vbp2CjpAjuRg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b3a9faab-d31f-4939-49f5-08dc6891a259 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Apr 2024 21:16:28.4973 (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: GVXP250MB1057 Subject: [FFmpeg-devel] [PATCH 41/57] avcodec/mpegvideo_dec: Add close function for mpegvideo-decoders 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: uNEVs2qF0bSt Currently identical to the H.261 and H.263 close functions (which it replaces). It will be extended in future commits. Signed-off-by: Andreas Rheinhardt --- libavcodec/flvdec.c | 4 ++-- libavcodec/h261dec.c | 11 +---------- libavcodec/h263dec.c | 12 ++---------- libavcodec/h263dec.h | 1 - libavcodec/intelh263dec.c | 2 +- libavcodec/mpeg12dec.c | 3 +-- libavcodec/mpeg4videodec.c | 2 +- libavcodec/mpegvideo_dec.c | 8 ++++++++ libavcodec/mpegvideodec.h | 1 + libavcodec/msmpeg4dec.c | 9 +++++---- libavcodec/rv10.c | 12 ++---------- libavcodec/rv30.c | 1 + libavcodec/rv34.c | 8 +++----- libavcodec/rv40.c | 1 + libavcodec/vc1dec.c | 18 ++++++++++++------ libavcodec/wmv2dec.c | 3 ++- 16 files changed, 43 insertions(+), 53 deletions(-) diff --git a/libavcodec/flvdec.c b/libavcodec/flvdec.c index 8baaed06a8..1bb1b12917 100644 --- a/libavcodec/flvdec.c +++ b/libavcodec/flvdec.c @@ -24,7 +24,7 @@ #include "flvdec.h" #include "h263dec.h" #include "mpegvideo.h" -#include "mpegvideodata.h" +#include "mpegvideodec.h" int ff_flv_decode_picture_header(MpegEncContext *s) { @@ -118,8 +118,8 @@ const FFCodec ff_flv_decoder = { .p.id = AV_CODEC_ID_FLV1, .priv_data_size = sizeof(MpegEncContext), .init = ff_h263_decode_init, - .close = ff_h263_decode_end, FF_CODEC_DECODE_CB(ff_h263_decode_frame), + .close = ff_mpv_decode_close, .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1, .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, .p.max_lowres = 3, diff --git a/libavcodec/h261dec.c b/libavcodec/h261dec.c index 9acfd984ee..d8d0dcf3cf 100644 --- a/libavcodec/h261dec.c +++ b/libavcodec/h261dec.c @@ -660,15 +660,6 @@ static int h261_decode_frame(AVCodecContext *avctx, AVFrame *pict, return get_consumed_bytes(s, buf_size); } -static av_cold int h261_decode_end(AVCodecContext *avctx) -{ - H261DecContext *const h = avctx->priv_data; - MpegEncContext *s = &h->s; - - ff_mpv_common_end(s); - return 0; -} - const FFCodec ff_h261_decoder = { .p.name = "h261", CODEC_LONG_NAME("H.261"), @@ -676,8 +667,8 @@ const FFCodec ff_h261_decoder = { .p.id = AV_CODEC_ID_H261, .priv_data_size = sizeof(H261DecContext), .init = h261_decode_init, - .close = h261_decode_end, FF_CODEC_DECODE_CB(h261_decode_frame), + .close = ff_mpv_decode_close, .p.capabilities = AV_CODEC_CAP_DR1, .p.max_lowres = 3, }; diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c index 4fe4a30000..b8db4ffc98 100644 --- a/libavcodec/h263dec.c +++ b/libavcodec/h263dec.c @@ -159,14 +159,6 @@ av_cold int ff_h263_decode_init(AVCodecContext *avctx) return 0; } -av_cold int ff_h263_decode_end(AVCodecContext *avctx) -{ - MpegEncContext *s = avctx->priv_data; - - ff_mpv_common_end(s); - return 0; -} - /** * Return the number of bytes consumed for building the current frame. */ @@ -702,8 +694,8 @@ const FFCodec ff_h263_decoder = { .p.id = AV_CODEC_ID_H263, .priv_data_size = sizeof(MpegEncContext), .init = ff_h263_decode_init, - .close = ff_h263_decode_end, FF_CODEC_DECODE_CB(ff_h263_decode_frame), + .close = ff_mpv_decode_close, .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY, .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, @@ -719,8 +711,8 @@ const FFCodec ff_h263p_decoder = { .p.id = AV_CODEC_ID_H263P, .priv_data_size = sizeof(MpegEncContext), .init = ff_h263_decode_init, - .close = ff_h263_decode_end, FF_CODEC_DECODE_CB(ff_h263_decode_frame), + .close = ff_mpv_decode_close, .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY, .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, diff --git a/libavcodec/h263dec.h b/libavcodec/h263dec.h index a01acc0834..633d4aa577 100644 --- a/libavcodec/h263dec.h +++ b/libavcodec/h263dec.h @@ -47,7 +47,6 @@ int ff_h263_decode_motion(MpegEncContext * s, int pred, int f_code); int ff_h263_decode_init(AVCodecContext *avctx); int ff_h263_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *avpkt); -int ff_h263_decode_end(AVCodecContext *avctx); void ff_h263_decode_init_vlc(void); int ff_h263_decode_picture_header(MpegEncContext *s); int ff_h263_decode_gob_header(MpegEncContext *s); diff --git a/libavcodec/intelh263dec.c b/libavcodec/intelh263dec.c index 5d34892ef7..d4051c36f1 100644 --- a/libavcodec/intelh263dec.c +++ b/libavcodec/intelh263dec.c @@ -132,8 +132,8 @@ const FFCodec ff_h263i_decoder = { .p.id = AV_CODEC_ID_H263I, .priv_data_size = sizeof(MpegEncContext), .init = ff_h263_decode_init, - .close = ff_h263_decode_end, FF_CODEC_DECODE_CB(ff_h263_decode_frame), + .close = ff_mpv_decode_close, .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1, .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, }; diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c index 0e2012b324..cf8493ba51 100644 --- a/libavcodec/mpeg12dec.c +++ b/libavcodec/mpeg12dec.c @@ -2595,9 +2595,8 @@ static av_cold int mpeg_decode_end(AVCodecContext *avctx) { Mpeg1Context *s = avctx->priv_data; - ff_mpv_common_end(&s->mpeg_enc_ctx); av_buffer_unref(&s->a53_buf_ref); - return 0; + return ff_mpv_decode_close(avctx); } const FFCodec ff_mpeg1video_decoder = { diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c index b138c94df9..58896250ce 100644 --- a/libavcodec/mpeg4videodec.c +++ b/libavcodec/mpeg4videodec.c @@ -3856,8 +3856,8 @@ const FFCodec ff_mpeg4_decoder = { .p.id = AV_CODEC_ID_MPEG4, .priv_data_size = sizeof(Mpeg4DecContext), .init = decode_init, - .close = ff_h263_decode_end, FF_CODEC_DECODE_CB(ff_h263_decode_frame), + .close = ff_mpv_decode_close, .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_FRAME_THREADS, .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, diff --git a/libavcodec/mpegvideo_dec.c b/libavcodec/mpegvideo_dec.c index 71a6c0ad67..c8952f4831 100644 --- a/libavcodec/mpegvideo_dec.c +++ b/libavcodec/mpegvideo_dec.c @@ -173,6 +173,14 @@ do {\ return 0; } +int ff_mpv_decode_close(AVCodecContext *avctx) +{ + MpegEncContext *s = avctx->priv_data; + + ff_mpv_common_end(s); + return 0; +} + int ff_mpv_common_frame_size_change(MpegEncContext *s) { int err = 0; diff --git a/libavcodec/mpegvideodec.h b/libavcodec/mpegvideodec.h index 4259d5a02d..35e9081d2c 100644 --- a/libavcodec/mpegvideodec.h +++ b/libavcodec/mpegvideodec.h @@ -63,6 +63,7 @@ int ff_mpv_export_qp_table(const MpegEncContext *s, AVFrame *f, int ff_mpeg_update_thread_context(AVCodecContext *dst, const AVCodecContext *src); void ff_mpeg_draw_horiz_band(MpegEncContext *s, int y, int h); void ff_mpeg_flush(AVCodecContext *avctx); +int ff_mpv_decode_close(AVCodecContext *avctx); void ff_print_debug_info(const MpegEncContext *s, const MPVPicture *p, AVFrame *pict); diff --git a/libavcodec/msmpeg4dec.c b/libavcodec/msmpeg4dec.c index a7b3fc4603..20d735a152 100644 --- a/libavcodec/msmpeg4dec.c +++ b/libavcodec/msmpeg4dec.c @@ -28,6 +28,7 @@ #include "codec_internal.h" #include "mpegutils.h" #include "mpegvideo.h" +#include "mpegvideodec.h" #include "msmpeg4.h" #include "msmpeg4dec.h" #include "libavutil/imgutils.h" @@ -848,8 +849,8 @@ const FFCodec ff_msmpeg4v1_decoder = { .p.id = AV_CODEC_ID_MSMPEG4V1, .priv_data_size = sizeof(MpegEncContext), .init = ff_msmpeg4_decode_init, - .close = ff_h263_decode_end, FF_CODEC_DECODE_CB(ff_h263_decode_frame), + .close = ff_mpv_decode_close, .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1, .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, .p.max_lowres = 3, @@ -862,8 +863,8 @@ const FFCodec ff_msmpeg4v2_decoder = { .p.id = AV_CODEC_ID_MSMPEG4V2, .priv_data_size = sizeof(MpegEncContext), .init = ff_msmpeg4_decode_init, - .close = ff_h263_decode_end, FF_CODEC_DECODE_CB(ff_h263_decode_frame), + .close = ff_mpv_decode_close, .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1, .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, .p.max_lowres = 3, @@ -876,8 +877,8 @@ const FFCodec ff_msmpeg4v3_decoder = { .p.id = AV_CODEC_ID_MSMPEG4V3, .priv_data_size = sizeof(MpegEncContext), .init = ff_msmpeg4_decode_init, - .close = ff_h263_decode_end, FF_CODEC_DECODE_CB(ff_h263_decode_frame), + .close = ff_mpv_decode_close, .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1, .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, .p.max_lowres = 3, @@ -890,8 +891,8 @@ const FFCodec ff_wmv1_decoder = { .p.id = AV_CODEC_ID_WMV1, .priv_data_size = sizeof(MpegEncContext), .init = ff_msmpeg4_decode_init, - .close = ff_h263_decode_end, FF_CODEC_DECODE_CB(ff_h263_decode_frame), + .close = ff_mpv_decode_close, .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1, .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, .p.max_lowres = 3, diff --git a/libavcodec/rv10.c b/libavcodec/rv10.c index 201e7ed6d0..6ece6a5a25 100644 --- a/libavcodec/rv10.c +++ b/libavcodec/rv10.c @@ -416,14 +416,6 @@ static av_cold int rv10_decode_init(AVCodecContext *avctx) return 0; } -static av_cold int rv10_decode_end(AVCodecContext *avctx) -{ - MpegEncContext *s = avctx->priv_data; - - ff_mpv_common_end(s); - return 0; -} - static int rv10_decode_packet(AVCodecContext *avctx, const uint8_t *buf, int buf_size, int buf_size2, int whole_size) { @@ -666,8 +658,8 @@ const FFCodec ff_rv10_decoder = { .p.id = AV_CODEC_ID_RV10, .priv_data_size = sizeof(RVDecContext), .init = rv10_decode_init, - .close = rv10_decode_end, FF_CODEC_DECODE_CB(rv10_decode_frame), + .close = ff_mpv_decode_close, .p.capabilities = AV_CODEC_CAP_DR1, .p.max_lowres = 3, }; @@ -679,8 +671,8 @@ const FFCodec ff_rv20_decoder = { .p.id = AV_CODEC_ID_RV20, .priv_data_size = sizeof(RVDecContext), .init = rv10_decode_init, - .close = rv10_decode_end, FF_CODEC_DECODE_CB(rv10_decode_frame), + .close = ff_mpv_decode_close, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY, .flush = ff_mpeg_flush, .p.max_lowres = 3, diff --git a/libavcodec/rv30.c b/libavcodec/rv30.c index 9c8bb966e9..5e1dd01aa1 100644 --- a/libavcodec/rv30.c +++ b/libavcodec/rv30.c @@ -302,6 +302,7 @@ const FFCodec ff_rv30_decoder = { FF_CODEC_DECODE_CB(ff_rv34_decode_frame), .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_FRAME_THREADS, + .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .flush = ff_mpeg_flush, UPDATE_THREAD_CONTEXT(ff_rv34_decode_update_thread_context), }; diff --git a/libavcodec/rv34.c b/libavcodec/rv34.c index d935c261b5..90296d7de3 100644 --- a/libavcodec/rv34.c +++ b/libavcodec/rv34.c @@ -1520,10 +1520,9 @@ av_cold int ff_rv34_decode_init(AVCodecContext *avctx) ff_h264_pred_init(&r->h, AV_CODEC_ID_RV40, 8, 1); - if ((ret = rv34_decoder_alloc(r)) < 0) { - ff_mpv_common_end(&r->s); + ret = rv34_decoder_alloc(r); + if (ret < 0) return ret; - } ff_thread_once(&init_static_once, rv34_init_tables); @@ -1821,8 +1820,7 @@ av_cold int ff_rv34_decode_end(AVCodecContext *avctx) { RV34DecContext *r = avctx->priv_data; - ff_mpv_common_end(&r->s); rv34_decoder_free(r); - return 0; + return ff_mpv_decode_close(avctx); } diff --git a/libavcodec/rv40.c b/libavcodec/rv40.c index 536bbc9623..0a5136d129 100644 --- a/libavcodec/rv40.c +++ b/libavcodec/rv40.c @@ -580,6 +580,7 @@ const FFCodec ff_rv40_decoder = { FF_CODEC_DECODE_CB(ff_rv34_decode_frame), .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_FRAME_THREADS, + .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .flush = ff_mpeg_flush, UPDATE_THREAD_CONTEXT(ff_rv34_decode_update_thread_context), }; diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c index 9bbd5cecf6..ea4f015acd 100644 --- a/libavcodec/vc1dec.c +++ b/libavcodec/vc1dec.c @@ -449,6 +449,8 @@ static enum AVPixelFormat vc1_get_format(AVCodecContext *avctx) return ff_get_format(avctx, vc1_hwaccel_pixfmt_list_420); } +static void vc1_decode_reset(AVCodecContext *avctx); + av_cold int ff_vc1_decode_init(AVCodecContext *avctx) { VC1Context *const v = avctx->priv_data; @@ -477,7 +479,7 @@ av_cold int ff_vc1_decode_init(AVCodecContext *avctx) ret = vc1_decode_init_alloc_tables(v); if (ret < 0) { - ff_vc1_decode_end(avctx); + vc1_decode_reset(avctx); return ret; } return 0; @@ -774,10 +776,7 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx) return 0; } -/** Close a VC1/WMV3 decoder - * @warning Initial try at using MpegEncContext stuff - */ -av_cold int ff_vc1_decode_end(AVCodecContext *avctx) +static av_cold void vc1_decode_reset(AVCodecContext *avctx) { VC1Context *v = avctx->priv_data; int i; @@ -803,9 +802,16 @@ av_cold int ff_vc1_decode_end(AVCodecContext *avctx) av_freep(&v->is_intra_base); // FIXME use v->mb_type[] av_freep(&v->luma_mv_base); ff_intrax8_common_end(&v->x8); - return 0; } +/** + * Close a MSS2/VC1/WMV3 decoder + */ +av_cold int ff_vc1_decode_end(AVCodecContext *avctx) +{ + vc1_decode_reset(avctx); + return ff_mpv_decode_close(avctx); +} /** Decode a VC1/WMV3 frame * @todo TODO: Handle VC-1 IDUs (Transport level?) diff --git a/libavcodec/wmv2dec.c b/libavcodec/wmv2dec.c index bb3829dcd6..5c91006169 100644 --- a/libavcodec/wmv2dec.c +++ b/libavcodec/wmv2dec.c @@ -27,6 +27,7 @@ #include "mathops.h" #include "mpegutils.h" #include "mpegvideo.h" +#include "mpegvideodec.h" #include "msmpeg4.h" #include "msmpeg4_vc1_data.h" #include "msmpeg4dec.h" @@ -584,7 +585,7 @@ static av_cold int wmv2_decode_end(AVCodecContext *avctx) WMV2DecContext *const w = avctx->priv_data; ff_intrax8_common_end(&w->x8); - return ff_h263_decode_end(avctx); + return ff_mpv_decode_close(avctx); } const FFCodec ff_wmv2_decoder = {