From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id DCBE849D0A for ; Thu, 9 May 2024 02:05:09 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1E6DB68D71B; Thu, 9 May 2024 05:05:06 +0300 (EEST) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2084.outbound.protection.outlook.com [40.92.91.84]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2A81668D70C for ; Thu, 9 May 2024 05:05:00 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=N0OcMEOf3P9jMaWkeEvYj/vzrUAN8v0vN6Usab/RaDGazzzjQ2aplwdmbSrXGlTm6tvMIa7ZpkOGg6J4ZB3EfM2urJlK4kCdWtS8pVzTDI7oKD1s8lf1QDiubKU+SB+qRpdN6bcBNfD9CXmS+b8Ocw/T0KxNWFxK4nceSaVTCrsmbw3Db5LewrH712MCn/KKDHrF5kH3vGvRchJb1v4Il8rZM171V9IR6D6Xn0pTLcp1CKoQyhQAa8BtVQtP3os5OlJJXDRuq/ib2qH4k7C5bJT2hFfKEhu03sErmtSUH6O672qFz5mr7nP1cxmC5Pl3XhneaG626dZHc/YWW5KqtA== 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=mBKuH6j5trALGXiXkTzFdsxl5Lz0VUatB3FJxZYiPsc=; b=eC5Ftall6buKy18Q3LpO4mmsd/2YW7bM7P8djzwT4askrc0feMCgRJUGbFZw2IjlJMxnI2oBrONOlAS1ghJqlNjZeX7Og/SN0167OF6kxxG6akvf/3bR9bMTMpgWPGy2uyv8F35wcojhRyNQyn4cuBI2IDGrCZV7v/Wy0dmSEyK3REr2LEbAIhAYsK7fo8YEhnuw5BnvdjYqzQLzBpcPLsZaTk2RB4veNSbjZIfOy4xdOwXPh/YADc/0wi6fwCyzu3481KSWqVDV0AFXQZIKmuskXZJMsMT8aYzdMKP0Sw+BnYtq7U+xBa8mBatyeeLv6gHvX+K+h/9BbV2g4NGofA== 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=mBKuH6j5trALGXiXkTzFdsxl5Lz0VUatB3FJxZYiPsc=; b=Cvusivr8DRjLr0hUlUNAdEIba1Z3IopWVKxMMNFEruCDXDsXFtWdwGotSzVBzjwr1Hujd+JD3uNGJ8OeMzpMz6vrEXMPR1286YIA3NgI+9Ypi1ACQCQsaNEV4YamdDjdTrtYAgWs5m7TuCEmebPE3RpESAn+d8b+UyQK43B9JVrVJQXXSekBq6dCo3kNdTfS5riQ7eKnkkPYjxmJRsfe6Rf2mvlyKiX3LugIBkbrwtItFtuSidtGKsQPHnNh7MnJtn65o+3kuu4lL2Ti7P94eGuRXRfErQmwpZ/5eDkGLhkFAoBSFer81JIYa6zzgIqbwTrf2GXk/KXIKPBHe3cu2Q== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AM8P250MB0044.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:3db::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.47; Thu, 9 May 2024 02:04:57 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614%7]) with mapi id 15.20.7544.041; Thu, 9 May 2024 02:04:57 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 9 May 2024 04:04:42 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [3rwimfHBG9meWK2KdpijHVyvjoGt3LtDAgKdxtQB6bE=] X-ClientProxiedBy: ZR0P278CA0067.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:21::18) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20240509020443.3715755-2-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AM8P250MB0044:EE_ X-MS-Office365-Filtering-Correlation-Id: 6982fdaa-57aa-41ea-03a1-08dc6fcc6cc5 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199019|440099019|3412199016|1710799017; X-Microsoft-Antispam-Message-Info: Ing0zkCR7NcBds4RCJafBKeJ/LMjcxmqX+iCFiHOLOCZ6DIwuB8Dd6xEetWkzqHV5awNZuHQIZ7nCHAEL9NrrOSf8a5y+dWGnLE9bvT0/+BNOej08+B8xNaVRlq5lzinAk+YX/oKaaIoqqGzzC5UNyaODsYK0Mtm5bQx/0y0wg0jdeKc7o9+2N7QSGYFIv6xdeWXVVDCMKczlwEufBkJE8HgsHvdW790W28C/mGY+R3bJfQv3khX4l/qg4vaN0Ch6qwWm2RyhqAc8fd9T/t/r1l/s1Jhqk8nkUD3sEL7kpwm2lFob64fMiJSMj93xsLIY6moXoA8Mb3HJri1VoGPb0ySlRGWU1JwFkw00dAU7F1gIH5QYfUmvBaXTxe/VM3VuVXG5DKi9Dqc74juys2BAWo1BUs9YD1ZiktxqswjVAtqsXE9e764Nmfs+ksGgYbqOyZgzbedekxh4U7/cycKeEU32Uhbgt2lIgbEhEo5y7DRY8qw5hUIb2EZ37hqvOZULhB/kipDfSUTJ6q/MvxI0Tw/WIYTR8m1oRTSOg0HDzMQjhf89nK75LeQr2yCkHJ/T6V/F3SaxKUHL5Gaq4I/2+hD9N3N36v5q0PwxS26+QV+Avctw4QwrHVTn2goBgaq X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?mLaz+AAPzipAlu9EHCSwfWUN8ZeusTDp5xyTbU6T89Sqcl7iHTDXtd2m7gx8?= =?us-ascii?Q?ndWS2OHLZanXs3pppY5KDVevMs6Y7r9xviBIENNNXGJM7aTzNcITEP65OuUI?= =?us-ascii?Q?QspD4gH8gJH3hEmnsA3s65dcTA24FIgQJhdbsnyhWT0yJjhlT2FKF3tK4J0t?= =?us-ascii?Q?ICuIzWsV4mFBFd1jNCuFdOF5VACxFk0ZVqOwtMATgygNxymrPZ6ClRFLcOFs?= =?us-ascii?Q?eGMaGM6BG1hMDe7UYMRo9Ixu0wIFs7OroC2s6aXKJsHouD0Cjr7rpE5ih0HH?= =?us-ascii?Q?oeeGFv52wiL4f0mxtQPwCNPqfPw9fvacNVXY4uMajNu8zoEv4qD75BQUTGT0?= =?us-ascii?Q?5L4fR8rSEEqECjQiYD0Y2GhUqUwVB2347eVsfGTCy7rmrArIOpI9ZhotG+4f?= =?us-ascii?Q?fpFMGE5/i9e+4TFCK+iHvkf/4P337ZL2Qi6ryNPcuHvU8cKxhIoxuusBYVEj?= =?us-ascii?Q?hwgSwhaj3jvkqo84RMPsGEdJLKVf8BpULMkGpbN+/UwT5Td1xdl+GJnLlgI4?= =?us-ascii?Q?dRAMTCL6mhB7I0l9P5aQyixko7U2+hyStC3sRzexFYtedtFtYWc8ABDYDbSJ?= =?us-ascii?Q?km0zLZU97eulakmNMovjVy9hHc095PvAV9+zDBaIeWl+sYvM0ehLXoTyyxSi?= =?us-ascii?Q?Lmom78KgLDx9+LeVTrEzkd3q+xX1YXHy24LXQ9bKooJ5DvOr3kr892EFctXS?= =?us-ascii?Q?7cy10tIAg288SpRrZpXyRqsj3zwB7KcZQk7d/j4fnTThkJUxPdUEUgoqQFLI?= =?us-ascii?Q?9FXzwdur7Q8r1/ZROim8XGL0BId3vzgOhqCYUszAzq9vyYZyYF45pIZ6yVta?= =?us-ascii?Q?FBeUDuw36xj/c+QoqsuWXZ97W/vuJzqSj0cQx7AGdKwdARYhyKesEG2rRhTG?= =?us-ascii?Q?fZVKNfjyyCD520x4uB5jCEOZrbJqF766PjsI4Ym5SUkVMW8bGED3IDEl2Y71?= =?us-ascii?Q?GUiG85C9redxLZoRUnavm6KOpRgsUx0c3v81vMkfr6CXF+99eRr89V61yEJh?= =?us-ascii?Q?2OaHYuEMOJrwrGYzxCRsRAMIVV6CWvgQ6/f0NwfFHe86Azn/bf1WXkS2ofK2?= =?us-ascii?Q?UekKlTE70FKIo9Ji1C5Isv2mxP2bOH3u3hD8SQC+Dz+dsw6MfKBUkapDby2S?= =?us-ascii?Q?7vy+LgjN6W4NFzPVzUt4jeZNBbfCsNYmALu1jRwJ3QBAUtSgofwgbF4h1OpU?= =?us-ascii?Q?qaOdrkWt6RCUdz5naOcOA7yxlH3bLZf9ridD+hBsbgFiAPubEVDI4kIAigKU?= =?us-ascii?Q?9xGMlWCegys/CguXIrGLMWFf0uMkFj29LZdd4En39A=3D=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6982fdaa-57aa-41ea-03a1-08dc6fcc6cc5 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 May 2024 02:04:57.0640 (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: AM8P250MB0044 Subject: [FFmpeg-devel] [PATCH 3/4] avcodec/decode: Set KEY flag+pict_type generically for intra-only codecs 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: This commit is the analog of 3f11eac75741888c7b2b6f93c458766f2613bab5 for decoding: It sets the AV_FRAME_FLAG_KEY and (for video decoders) also pict_type to AV_PICTURE_TYPE_I. It furthermore stops setting audio frames as always being key frames -- it is wrong for e.g. TrueHD/MLP. The latter also affects TAK and DFPWM. The change already improves output for several decoders where it has been forgotten to set e.g. pict_type like speedhq, wnv1 or tiff. The latter is the reason for the change to the exif-image-tiff FATE test reference file. Signed-off-by: Andreas Rheinhardt --- libavcodec/decode.c | 29 +++++++++++++++++++++++++++-- libavcodec/pthread_frame.c | 17 ++++++++++++++--- tests/ref/fate/exif-image-tiff | 2 +- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/libavcodec/decode.c b/libavcodec/decode.c index d031b1ca17..0ca5344ef5 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -57,6 +57,20 @@ typedef struct DecodeContext { AVCodecInternal avci; + /** + * This is set to AV_FRAME_FLAG_KEY for decoders of intra-only formats + * (those whose codec descriptor has AV_CODEC_PROP_INTRA_ONLY set) + * to set the flag generically. + */ + int intra_only_flag; + + /** + * This is set to AV_PICTURE_TYPE_I for intra only video decoders + * and to AV_PICTURE_TYPE_NONE for other decoders. It is used to set + * the AVFrame's pict_type before the decoder receives it. + */ + enum AVPictureType initial_pict_type; + /* to prevent infinite loop on errors when draining */ int nb_draining_errors; @@ -382,6 +396,7 @@ static int discard_samples(AVCodecContext *avctx, AVFrame *frame, int64_t *disca static inline int decode_simple_internal(AVCodecContext *avctx, AVFrame *frame, int64_t *discarded_samples) { AVCodecInternal *avci = avctx->internal; + DecodeContext *dc = decode_ctx(avci); AVPacket *const pkt = avci->in_pkt; const FFCodec *const codec = ffcodec(avctx->codec); int got_frame, consumed; @@ -409,6 +424,8 @@ static inline int decode_simple_internal(AVCodecContext *avctx, AVFrame *frame, if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME) { consumed = ff_thread_decode_frame(avctx, frame, &got_frame, pkt); } else { + frame->pict_type = dc->initial_pict_type; + frame->flags |= dc->intra_only_flag; consumed = codec->cb.decode(avctx, frame, &got_frame, pkt); if (!(codec->caps_internal & FF_CODEC_CAP_SETS_PKT_DTS)) @@ -597,6 +614,8 @@ static int decode_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) av_assert0(!frame->buf[0]); if (codec->cb_type == FF_CODEC_CB_TYPE_RECEIVE_FRAME) { + frame->pict_type = dc->initial_pict_type; + frame->flags |= dc->intra_only_flag; ret = codec->cb.receive_frame(avctx, frame); emms_c(); if (!ret) { @@ -626,8 +645,7 @@ static int decode_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) frame->width = avctx->width; if (!frame->height) frame->height = avctx->height; - } else - frame->flags |= AV_FRAME_FLAG_KEY; + } ret = fill_frame_props(avctx, frame); if (ret < 0) { @@ -1793,6 +1811,13 @@ int ff_decode_preinit(AVCodecContext *avctx) DecodeContext *dc = decode_ctx(avci); int ret = 0; + dc->initial_pict_type = AV_PICTURE_TYPE_NONE; + if (avctx->codec_descriptor->props & AV_CODEC_PROP_INTRA_ONLY) { + dc->intra_only_flag = AV_FRAME_FLAG_KEY; + if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) + dc->initial_pict_type = AV_PICTURE_TYPE_I; + } + /* if the decoder init function was already called previously, * free the already allocated subtitle_header before overwriting it */ av_freep(&avctx->subtitle_header); diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c index 67f09c1f48..982e4a64c5 100644 --- a/libavcodec/pthread_frame.c +++ b/libavcodec/pthread_frame.c @@ -22,13 +22,11 @@ * @see doc/multithreading.txt */ -#include "config.h" - #include -#include #include "avcodec.h" #include "avcodec_internal.h" +#include "codec_desc.h" #include "codec_internal.h" #include "decode.h" #include "hwaccel_internal.h" @@ -108,6 +106,10 @@ typedef struct PerThreadContext { int hwaccel_threadsafe; atomic_int debug_threads; ///< Set if the FF_DEBUG_THREADS option is set. + + /// The following two fields have the same semantics as the DecodeContext field + int intra_only_flag; + enum AVPictureType initial_pict_type; } PerThreadContext; /** @@ -220,6 +222,8 @@ static attribute_align_arg void *frame_worker_thread(void *arg) av_frame_unref(p->frame); p->got_frame = 0; + p->frame->pict_type = p->initial_pict_type; + p->frame->flags |= p->intra_only_flag; p->result = codec->cb.decode(avctx, p->frame, &p->got_frame, p->avpkt); if ((p->result < 0 || !p->got_frame) && p->frame->buf[0]) @@ -763,6 +767,13 @@ static av_cold int init_thread(PerThreadContext *p, int *threads_to_free, AVCodecContext *copy; int err; + p->initial_pict_type = AV_PICTURE_TYPE_NONE; + if (avctx->codec_descriptor->props & AV_CODEC_PROP_INTRA_ONLY) { + p->intra_only_flag = AV_FRAME_FLAG_KEY; + if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) + p->initial_pict_type = AV_PICTURE_TYPE_I; + } + atomic_init(&p->state, STATE_INPUT_READY); copy = av_memdup(avctx, sizeof(*avctx)); diff --git a/tests/ref/fate/exif-image-tiff b/tests/ref/fate/exif-image-tiff index 887c039df9..f5ff4dc16c 100644 --- a/tests/ref/fate/exif-image-tiff +++ b/tests/ref/fate/exif-image-tiff @@ -20,7 +20,7 @@ crop_left=0 crop_right=0 pix_fmt=rgb24 sample_aspect_ratio=1:1 -pict_type=? +pict_type=I interlaced_frame=0 top_field_first=0 repeat_pict=0 -- 2.40.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".