From patchwork Mon May 3 13:31:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 27570 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a10:399:0:0:0:0 with SMTP id 25csp257060pxh; Mon, 3 May 2021 06:32:33 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxRZ1CmqMRrRPZLqqbd38unZAwcaih43AsVzXlNQgRMGD47yTnH1S6y/BhYDt3lWrDsr58A X-Received: by 2002:a05:6402:280d:: with SMTP id h13mr20324046ede.105.1620048753481; Mon, 03 May 2021 06:32:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620048753; cv=none; d=google.com; s=arc-20160816; b=gJW8eq5X6FbomCFv0uj6X9TdxzNmNFv/+pMo7QVrLwdmpqWeVRKDvZKSoAzzpXyUZK iuBQKp1sw/wYRcD8IQej6T9lY0Y3CK9JmrBVYGA5GmomFcLME9KyQJtyt4NTwUjdo4th VS5tlEGhwM4ZKEf3Enzn3hhTKUKKvUboIKkOZ3TW7tOZzUtvCoJ9TlatqLwm+6KAmxnX b62PLVl6GF1ChnyqBlLiD4McPPxGzNr+Eu8jRzUhY60JozO6vQjT6kiYWrfRujFylhGV dOb1xWRBYgBA6YRAbJ4GscB6lVklzK22wvNYd/WgX8IeUPlzENNp4h27nQDqtUf3QFyF VyTA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=+RAYee1rzGlLN38FMwDzWRnoJiOhO0Xriz+ev+N2zog=; b=0iIQz21eHtPfaaUUOrho2GVLH3WC24ZbEyddpwAfD2uA4AgSLutzvP9SwXDPFRRCvz DHyH+oMrfGjWmlwBt0JZwHc9rDebtFR+cd4cQ9bky8lXNPom5mWddFf8Ixv1fQp6sPDw sklqzpIK1JVg/PLO6KaHeA5r/rTcmJF94H6u1EZnsa+fX91uAw4HTDOQDV5wBArPpx9d qFp3ajaSx/WX4VUu22nNYr2nCH4VxLavCUW3CBnL6X3t00ZQ81MO0jIFQY1XW42TObqL mgb32czz4YJdip//I2Qc/+wm6ASz1DAQMHE6pTwknAj36TrFIPWSKAWz3HYafd63Oz/F YTgw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=qsBNQKT3; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id o9si10594791ejc.407.2021.05.03.06.32.33; Mon, 03 May 2021 06:32:33 -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=@gmail.com header.s=20161025 header.b=qsBNQKT3; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C4E4E687F34; Mon, 3 May 2021 16:32:29 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f175.google.com (mail-qt1-f175.google.com [209.85.160.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2EC12680226 for ; Mon, 3 May 2021 16:32:23 +0300 (EEST) Received: by mail-qt1-f175.google.com with SMTP id g1so3612574qtq.6 for ; Mon, 03 May 2021 06:32:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=uo9c/iayA0dscJ7UKQzwx2vcv74BL531iDA38z2VbPA=; b=qsBNQKT3u63XFBlpI6u06F0RH2fYDnsVva6XGmNs/RY2sAIruzP51g2EiOBTqwQGCv rvpZnM1S9nyDMtZCa6jy4L2XH++Nezknmo9Lwek+P4QRnkxGeq5c191weSCqhHzFm8rW 9T6rNNcUE0FIgNwzijEG9OUtdp/ExUFpW/i+/eh5ozrdIyWwz08IPlZDaiR03K5VgZGe Ux1ndRjWlMK3sH2w8oQ6OiMku1eZC+XGVeVXR33ShyQ3T7h3kwb97v+RGPs4U4mwdXbu RQwyJ5iCxMMvPhOHKVi4aY9MxEDbXnuwxs+ZVoYNxomKjXehHXRZax3gAY8ozGL15tBk WfjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=uo9c/iayA0dscJ7UKQzwx2vcv74BL531iDA38z2VbPA=; b=Fo0r8E877JEVmR6Zi8vAOBwZtfPCasD/WAxZPHpyc5z/3CB+dvvZNUC4Pvn+18z0rg aM3t0C9RUtz/entYzc8u+a4qz8L2bKQHbuQL47BfJzBzw2mU2JOCKANnxsh47x4Pz+ML FFTmfCFDWW5AzGs/uFQIi7986+aIIor7/bv4c4S7xxNKGnGaS1k3mdwrfX14Pu8PdCzY +xPevEVA6VzWvtNStPBYlKceaJGsu7tQDPWq2bCIoU0XiLTNNV+gg5NrFdJcwyb8A5lf auT4EnRdF9r+eDmAWu+wn0UxktS2QgvR4HOj0FN3PE1wWwlPvj6JS19w6hRdMmgQBpif XkFw== X-Gm-Message-State: AOAM533v6GJoIceVO0taki8KHgqLcCx+N3N0pKQOLgZ70vvGVTWvhOOs 7tIou1usmUlqeeD6z+z61bZgVnRxhE4= X-Received: by 2002:ac8:6f4c:: with SMTP id n12mr17720235qtv.22.1620048741138; Mon, 03 May 2021 06:32:21 -0700 (PDT) Received: from localhost.localdomain ([191.83.208.172]) by smtp.gmail.com with ESMTPSA id 189sm5751929qkh.99.2021.05.03.06.32.20 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 06:32:20 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 3 May 2021 10:31:56 -0300 Message-Id: <20210503133200.1434-1-jamrial@gmail.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/5] avformat: move AVStream.last-IP_{pts, duration} to AVStreamInternal 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: TxtfUw12rwmI Those are private fields, no reason to have them exposed in a public header. Signed-off-by: James Almer --- libavformat/avformat.h | 2 -- libavformat/internal.h | 3 +++ libavformat/nutdec.c | 2 +- libavformat/utils.c | 20 ++++++++++---------- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 624d2dae2c..e62c6d1567 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1002,8 +1002,6 @@ typedef struct AVStream { */ int64_t first_dts; int64_t cur_dts; - int64_t last_IP_pts; - int last_IP_duration; /** * Number of packets to buffer for codec probing diff --git a/libavformat/internal.h b/libavformat/internal.h index 7d0eab44ac..10d8f8dfeb 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -365,6 +365,9 @@ struct AVStreamInternal { * last packet in packet_buffer for this stream when muxing. */ struct PacketList *last_in_packet_buffer; + + int64_t last_IP_pts; + int last_IP_duration; }; #ifdef __GNUC__ diff --git a/libavformat/nutdec.c b/libavformat/nutdec.c index 46f21ddd57..e709257135 100644 --- a/libavformat/nutdec.c +++ b/libavformat/nutdec.c @@ -1086,7 +1086,7 @@ static int decode_frame(NUTContext *nut, AVPacket *pkt, int frame_code) stc->skip_until_key_frame = 0; discard = s->streams[stream_id]->discard; - last_IP_pts = s->streams[stream_id]->last_IP_pts; + last_IP_pts = s->streams[stream_id]->internal->last_IP_pts; if ((discard >= AVDISCARD_NONKEY && !(stc->last_flags & FLAG_KEY)) || (discard >= AVDISCARD_BIDIR && last_IP_pts != AV_NOPTS_VALUE && last_IP_pts > pts) || diff --git a/libavformat/utils.c b/libavformat/utils.c index 49bf19b2b0..b5b0995f32 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -1285,28 +1285,28 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st, /* DTS = decompression timestamp */ /* PTS = presentation timestamp */ if (pkt->dts == AV_NOPTS_VALUE) - pkt->dts = st->last_IP_pts; + pkt->dts = st->internal->last_IP_pts; update_initial_timestamps(s, pkt->stream_index, pkt->dts, pkt->pts, pkt); if (pkt->dts == AV_NOPTS_VALUE) pkt->dts = st->cur_dts; /* This is tricky: the dts must be incremented by the duration * of the frame we are displaying, i.e. the last I- or P-frame. */ - if (st->last_IP_duration == 0 && (uint64_t)pkt->duration <= INT32_MAX) - st->last_IP_duration = pkt->duration; + if (st->internal->last_IP_duration == 0 && (uint64_t)pkt->duration <= INT32_MAX) + st->internal->last_IP_duration = pkt->duration; if (pkt->dts != AV_NOPTS_VALUE) - st->cur_dts = av_sat_add64(pkt->dts, st->last_IP_duration); + st->cur_dts = av_sat_add64(pkt->dts, st->internal->last_IP_duration); if (pkt->dts != AV_NOPTS_VALUE && pkt->pts == AV_NOPTS_VALUE && - st->last_IP_duration > 0 && + st->internal->last_IP_duration > 0 && ((uint64_t)st->cur_dts - (uint64_t)next_dts + 1) <= 2 && next_dts != next_pts && next_pts != AV_NOPTS_VALUE) pkt->pts = next_dts; if ((uint64_t)pkt->duration <= INT32_MAX) - st->last_IP_duration = pkt->duration; - st->last_IP_pts = pkt->pts; + st->internal->last_IP_duration = pkt->duration; + st->internal->last_IP_pts = pkt->pts; /* Cannot compute PTS if not present (we can compute it only * by knowing the future. */ } else if (pkt->pts != AV_NOPTS_VALUE || @@ -1823,7 +1823,7 @@ void ff_read_frame_flush(AVFormatContext *s) av_parser_close(st->parser); st->parser = NULL; } - st->last_IP_pts = AV_NOPTS_VALUE; + st->internal->last_IP_pts = AV_NOPTS_VALUE; st->internal->last_dts_for_order_check = AV_NOPTS_VALUE; if (st->first_dts == AV_NOPTS_VALUE) st->cur_dts = RELATIVE_TS_BASE; @@ -2840,7 +2840,7 @@ skip_duration_calc: st = ic->streams[i]; st->cur_dts = st->first_dts; - st->last_IP_pts = AV_NOPTS_VALUE; + st->internal->last_IP_pts = AV_NOPTS_VALUE; st->internal->last_dts_for_order_check = AV_NOPTS_VALUE; for (j = 0; j < MAX_REORDER_DELAY + 1; j++) st->internal->pts_buffer[j] = AV_NOPTS_VALUE; @@ -4423,7 +4423,7 @@ AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c) st->internal->pts_wrap_reference = AV_NOPTS_VALUE; st->internal->pts_wrap_behavior = AV_PTS_WRAP_IGNORE; - st->last_IP_pts = AV_NOPTS_VALUE; + st->internal->last_IP_pts = AV_NOPTS_VALUE; st->internal->last_dts_for_order_check = AV_NOPTS_VALUE; for (i = 0; i < MAX_REORDER_DELAY + 1; i++) st->internal->pts_buffer[i] = AV_NOPTS_VALUE; From patchwork Mon May 3 13:31:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 27573 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a10:399:0:0:0:0 with SMTP id 25csp257206pxh; Mon, 3 May 2021 06:32:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy2CDB5GDI4j2lHxnMDS0XvRWWNc/h+CwdDM/xeYN+cjbhU7ovGp8mY6UrGpQ8yWxxmRYN9 X-Received: by 2002:aa7:c495:: with SMTP id m21mr7035753edq.123.1620048762414; Mon, 03 May 2021 06:32:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620048762; cv=none; d=google.com; s=arc-20160816; b=Oze8v/WMkWbTk2qDakY4c0e+x6AbjH12fB0DZfzD5C60x3f/P2XIxL3EkI+GvjvgBX 55TdedZtHIikZglOS61X95r8gGC7AV8JzXHwIG9CEIROipKjfx1UaaxqhyUeG7C5QU6R A7+2p1PFiTVfr538Rn57lYwmkxFGK+DHCKt1QaogZ06YX1bqW8IeFkZlZ+eMc/18IqN8 /upzEqe7gXaVUu4ZqxOhY7yqy1Pl4Ff0fPgHGTRxQYRsjXkZpUFwtA3YuSE8/b4yHaWh nPeTcgk3nS45t6/hxpqC6e4oOXdPILTyWe0Lh3btfMnL0wC9hXgccar2H4whSWIhJczQ EskA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=dY7WRwFN2bJSuv874AihJ/NaRKmDJWznbdWWePAb0tc=; b=DQ3RiP/rRhKEhmHb9A7gJhV/34/KT8WXlY/bwVW6NjuL0bx7yQn+nlVHXMlZ5BJz+i qTo7SLqNOtvFaA5zyY1+cKVS6GR/Q97JUNhIw/5NnhqvlAbe+XoT4/E0ZmVtbJEXUT5I ruV5sToszbtKXW4gJd5dxrIZQV6D+sw2dluCNn8s4Hksjct/wDMVhdYlzvWFM4mZlsdr 0r3YhcoS15Gu6+wKtkNRiJFWDwGKxTfQhpgBOvlq6GKiCS9WRVprBlRw11oh18mqlgrX iLjjR+V5CH0aBe8T62LrGFpZqZYgCUe6miTvfuj5lJZdHyNGjY5HklVXyZHNeS8rPpgp RVvA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=QQczcddR; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id q6si11428752ejn.673.2021.05.03.06.32.42; Mon, 03 May 2021 06:32:42 -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=@gmail.com header.s=20161025 header.b=QQczcddR; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C29B2687FB5; Mon, 3 May 2021 16:32:30 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f169.google.com (mail-qt1-f169.google.com [209.85.160.169]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 344346809AE for ; Mon, 3 May 2021 16:32:24 +0300 (EEST) Received: by mail-qt1-f169.google.com with SMTP id f12so3615698qtf.2 for ; Mon, 03 May 2021 06:32:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=20/SX9bqvN0zbpRJX9l/Fca7iYBI78xjkNqVTghFHu4=; b=QQczcddRL0pyWwe30h/2P8OUlrL823kwcfYwy5kRYrTR9iYgk5KBlrGdxbnq8e33La ahoDxrri8IEJ3lXMCvOqOl7D7r8BPdSXSg/jtkD0eFEuVgZ7hn8qXssh52T356s1TZ6Z o23zBqgfznJj69KAb9uKLik3+3eWYuaitj6tckEu5hDmekK8H0jSfErlP6h8aRVPeaZ5 z0wcfRqA540ZgPrGwyr3hTv4Jo8Pd1ucKd+XDSzB3ygglVkWt6k2omVFZ1p2gF+Xl2pD Hb5TeVYIOvAbfe8qLqLoLKb+lAR/X6sM5c4581Yg7yJNeGJxbrjmHvaBq9Obk1iMYLD9 lpcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=20/SX9bqvN0zbpRJX9l/Fca7iYBI78xjkNqVTghFHu4=; b=RzheyevN3bWtot9mtJGQ/85tYgjKKF+tCV1xCtToEJcmD8ZtW/7xzwbAOLCMZ75SkU mZOItrntAwuM3X+KwUQGY5Dbwyo+K3bgbP47Y7DWO8sgvWgOvb+xPMLZrX73CnZ7Hc6K 7dCyyHF01d0GXSAWp5L4/F3BirXfBbndfci3hIQd+F77Zwpo0smLaNkaaKd4i4kX705z 7FctAG+FWLIbjNkiL6AB2tqJFfJMK6wWstZi87Esdud/2xzt43XSSQ05mWvHPPs1LF/v V+WC1NImWzVPI0REUm4PvbGdYQgM1YUrrcj/hZl6qAV0psItSDZUaXrd8USJlpjg9YZ4 HgNA== X-Gm-Message-State: AOAM5328SfXCfiPGxG8V6QAoDupO9AHBTSHpEQXaV+/9GNQXnUmGgjFE BaGNaL89E+xbYxn5pcvyKuezCiy6HVI= X-Received: by 2002:a05:622a:1353:: with SMTP id w19mr16953488qtk.220.1620048742417; Mon, 03 May 2021 06:32:22 -0700 (PDT) Received: from localhost.localdomain ([191.83.208.172]) by smtp.gmail.com with ESMTPSA id 189sm5751929qkh.99.2021.05.03.06.32.21 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 06:32:22 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 3 May 2021 10:31:57 -0300 Message-Id: <20210503133200.1434-2-jamrial@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210503133200.1434-1-jamrial@gmail.com> References: <20210503133200.1434-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/5] avformat: move AVStream.probe_packets to AVStreamInternal 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: yM3nZtV67clq It's a private fields, no reason to have it exposed in a public header. Signed-off-by: James Almer --- libavformat/avformat.h | 5 ----- libavformat/internal.h | 5 +++++ libavformat/mpegts.c | 2 +- libavformat/sbgdec.c | 2 +- libavformat/tedcaptionsdec.c | 2 +- libavformat/utils.c | 16 ++++++++-------- libavformat/wavdec.c | 2 +- 7 files changed, 17 insertions(+), 17 deletions(-) diff --git a/libavformat/avformat.h b/libavformat/avformat.h index e62c6d1567..d796f02094 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1003,11 +1003,6 @@ typedef struct AVStream { int64_t first_dts; int64_t cur_dts; - /** - * Number of packets to buffer for codec probing - */ - int probe_packets; - /** * Number of frames that have been demuxed during avformat_find_stream_info() */ diff --git a/libavformat/internal.h b/libavformat/internal.h index 10d8f8dfeb..6af38720c8 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -368,6 +368,11 @@ struct AVStreamInternal { int64_t last_IP_pts; int last_IP_duration; + + /** + * Number of packets to buffer for codec probing + */ + int probe_packets; }; #ifdef __GNUC__ diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index 9092dbce72..0ed108ce89 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -954,7 +954,7 @@ static int mpegts_set_stream_info(AVStream *st, PESContext *pes, } if ((st->codecpar->codec_id == AV_CODEC_ID_NONE || (st->internal->request_probe > 0 && st->internal->request_probe < AVPROBE_SCORE_STREAM_RETRY / 5)) && - st->probe_packets > 0 && + st->internal->probe_packets > 0 && stream_type == STREAM_TYPE_PRIVATE_DATA) { st->codecpar->codec_type = AVMEDIA_TYPE_DATA; st->codecpar->codec_id = AV_CODEC_ID_BIN_DATA; diff --git a/libavformat/sbgdec.c b/libavformat/sbgdec.c index bc9945dfd4..7b9ada569e 100644 --- a/libavformat/sbgdec.c +++ b/libavformat/sbgdec.c @@ -1438,7 +1438,7 @@ static av_cold int sbg_read_header(AVFormatContext *avf) st->codecpar->sample_rate = sbg->sample_rate; st->codecpar->frame_size = sbg->frame_size; avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); - st->probe_packets = 0; + st->internal->probe_packets = 0; st->start_time = av_rescale(script.start_ts, sbg->sample_rate, AV_TIME_BASE); st->duration = script.end_ts == AV_NOPTS_VALUE ? AV_NOPTS_VALUE : diff --git a/libavformat/tedcaptionsdec.c b/libavformat/tedcaptionsdec.c index 94e8432c53..6e87ef66e9 100644 --- a/libavformat/tedcaptionsdec.c +++ b/libavformat/tedcaptionsdec.c @@ -299,7 +299,7 @@ static av_cold int tedcaptions_read_header(AVFormatContext *avf) st->codecpar->codec_type = AVMEDIA_TYPE_SUBTITLE; st->codecpar->codec_id = AV_CODEC_ID_TEXT; avpriv_set_pts_info(st, 64, 1, 1000); - st->probe_packets = 0; + st->internal->probe_packets = 0; st->start_time = 0; st->duration = last->pts + last->duration; st->cur_dts = 0; diff --git a/libavformat/utils.c b/libavformat/utils.c index b5b0995f32..df6d9b5cf6 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -334,7 +334,7 @@ static int set_codec_from_probe_data(AVFormatContext *s, AVStream *st, int i; av_log(s, AV_LOG_DEBUG, "Probe with size=%d, packets=%d detected %s with score=%d\n", - pd->buf_size, s->max_probe_packets - st->probe_packets, + pd->buf_size, s->max_probe_packets - st->internal->probe_packets, fmt->name, score); for (i = 0; fmt_id_type[i].name; i++) { if (!strcmp(fmt->name, fmt_id_type[i].name)) { @@ -648,8 +648,8 @@ static int probe_codec(AVFormatContext *s, AVStream *st, const AVPacket *pkt) if (st->internal->request_probe>0) { AVProbeData *pd = &st->internal->probe_data; int end; - av_log(s, AV_LOG_DEBUG, "probing stream %d pp:%d\n", st->index, st->probe_packets); - --st->probe_packets; + av_log(s, AV_LOG_DEBUG, "probing stream %d pp:%d\n", st->index, st->internal->probe_packets); + --st->internal->probe_packets; if (pkt) { uint8_t *new_buf = av_realloc(pd->buf, pd->buf_size+pkt->size+AVPROBE_PADDING_SIZE); @@ -665,7 +665,7 @@ static int probe_codec(AVFormatContext *s, AVStream *st, const AVPacket *pkt) memset(pd->buf + pd->buf_size, 0, AVPROBE_PADDING_SIZE); } else { no_packet: - st->probe_packets = 0; + st->internal->probe_packets = 0; if (!pd->buf_size) { av_log(s, AV_LOG_WARNING, "nothing to probe for stream %d\n", st->index); @@ -673,7 +673,7 @@ no_packet: } end= s->internal->raw_packet_buffer_remaining_size <= 0 - || st->probe_packets<= 0; + || st->internal->probe_packets<= 0; if (end || av_log2(pd->buf_size) != av_log2(pd->buf_size - pkt->size)) { int score = set_codec_from_probe_data(s, st, pd); @@ -804,7 +804,7 @@ FF_ENABLE_DEPRECATION_WARNINGS return err; for (i = 0; i < s->nb_streams; i++) { st = s->streams[i]; - if (st->probe_packets || st->internal->request_probe > 0) + if (st->internal->probe_packets || st->internal->request_probe > 0) if ((err = probe_codec(s, st, NULL)) < 0) return err; av_assert0(st->internal->request_probe <= 0); @@ -1831,7 +1831,7 @@ void ff_read_frame_flush(AVFormatContext *s) /* We set the current DTS to an unspecified origin. */ st->cur_dts = AV_NOPTS_VALUE; - st->probe_packets = s->max_probe_packets; + st->internal->probe_packets = s->max_probe_packets; for (j = 0; j < MAX_REORDER_DELAY + 1; j++) st->internal->pts_buffer[j] = AV_NOPTS_VALUE; @@ -4419,7 +4419,7 @@ AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c) st->start_time = AV_NOPTS_VALUE; st->duration = AV_NOPTS_VALUE; st->first_dts = AV_NOPTS_VALUE; - st->probe_packets = s->max_probe_packets; + st->internal->probe_packets = s->max_probe_packets; st->internal->pts_wrap_reference = AV_NOPTS_VALUE; st->internal->pts_wrap_behavior = AV_PTS_WRAP_IGNORE; diff --git a/libavformat/wavdec.c b/libavformat/wavdec.c index 0c8b8bf85d..8e2a7a7475 100644 --- a/libavformat/wavdec.c +++ b/libavformat/wavdec.c @@ -167,7 +167,7 @@ static void handle_stream_probing(AVStream *st) { if (st->codecpar->codec_id == AV_CODEC_ID_PCM_S16LE) { st->internal->request_probe = AVPROBE_SCORE_EXTENSION; - st->probe_packets = FFMIN(st->probe_packets, 32); + st->internal->probe_packets = FFMIN(st->internal->probe_packets, 32); } } From patchwork Mon May 3 13:31:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 27574 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a10:399:0:0:0:0 with SMTP id 25csp257351pxh; Mon, 3 May 2021 06:32:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz4pIxdGAXiNx0u0sXdwt1mnpUeDKPSgr5syJzu+JyOmGyAnpWL1DixGn5DUUm6kaDsPKtR X-Received: by 2002:a17:906:38c5:: with SMTP id r5mr16106383ejd.230.1620048772032; Mon, 03 May 2021 06:32:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620048772; cv=none; d=google.com; s=arc-20160816; b=Ga99oRHufU9Zb6j4QM6bbUfmbtNbfcUMY9leXlyY7j3n8pTiEFP9ttJbTrXiU4Abpb xt01ZZxb47vGVobaPhGtdmVLGZLElzeZCAcy7EnQp8wm5OTtp3XbYPa6mgmpFoFrpbLU V1GgLXkHHjesUKo0L3q1BLa/s4W1j9ekYNyR5ChHrkbkXRBIQg84N8qldqqPgE4EuWD4 VmkvPc73ncXWTMMriaLyu4JpT/TU+YAsrTm1/hQvj+16+FBDX+EEq3w8mNcHeDMt6eIF aVIvogDDxUKOaEONPCxBCU8K7Dt2uk5z/0xiAjdyyf8QamwOGskDzszDcgwucHH0ye4R 4qPA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=mhpgKXI26zffn9gJJetqNQzK0Us/aoJ4+Q0qoIANLC0=; b=VuZ3uo9hHkPz7dTkX7pRcX5yoXw3x1fmeBjaBe3O73rDUjjex6SDB7yuju+GPcU3Ok Kj1EEWXztF/5xZUSpJ8C0sYr1N8NWBQLXu0buLFJTBw2+8aTLArZqNR01MhUmze6qfFU WO6bqM78TMzUpIBMJCsIO3EjnQAFm6062v3aYsrf1+1VmtNIytKQ5yhd+cn/JO35xkY4 mfrm+Q2Uwnz78nD2ZAXMzHzYfjIsiuWUCHUtum71eC64eTYETyaaSzWOT4318S/YK4WQ uxC6ADyDIM+kCL3vYd4NBZxl103pJM2dPexwO/cQFX7JS6EBsgs5jb70WoS9+j1Yq8dB zKvA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=QtXsLnRt; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id d10si9805390edm.362.2021.05.03.06.32.51; Mon, 03 May 2021 06:32:52 -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=@gmail.com header.s=20161025 header.b=QtXsLnRt; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BE377688068; Mon, 3 May 2021 16:32:32 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f169.google.com (mail-qt1-f169.google.com [209.85.160.169]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8E4E5680CDE for ; Mon, 3 May 2021 16:32:26 +0300 (EEST) Received: by mail-qt1-f169.google.com with SMTP id 1so3647169qtb.0 for ; Mon, 03 May 2021 06:32:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=9SIvpZEo8qAHKjpUlf5n2TiZdBs2El6wnBXo3MfH27s=; b=QtXsLnRtBQzvN4m6afU93PtHXjvDNwPOaU102sechK4rTDxlx+YECNiW2mE5rNn23z G6Z9lTeJ+bRkFyQ7I6iFxurwuytxXmkKuCXQeCVhltTj+fdMj+wFh51SDDTOEWIVQKUC BKwc4hu40XOjNbY5xwnGm4hea0Zs7lFsrY3u+XZDXewGHqS4G6jg2zPTqPrA6L83meUr DhOmRCmBYa17e+AbCQutR1NlRQbw29i+KDwe9Qqny8aedQF1/lpiVesWL1gdb+cZ0ELk Cehosvlzjmp/RoJJKFh7Z0nXHmnrplspzRc55bQQZ7qh1GsZNJ0j1+cqBwxnZvRfazhN JS6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=9SIvpZEo8qAHKjpUlf5n2TiZdBs2El6wnBXo3MfH27s=; b=g5C8Ql3vgH6nbO1i+OPFHDMCPg8xLrDKoXVe30Y+SbW/Y8sG87vs/rQ45miR5ND0jv pfGiRAQ/lhhDlQaBhG+nQ9HXvFLmIzoNbp55tc5d9fpyIMUWMDhrAgNEzH+r9r78J6JF 1kpjitjt+kaNVcWY4lnk0T8gL7LgPoZ4CHd2NhG2PBNZ+NmXQPBO/9GhNnXFfv/aBugz 1V0PNhWusHmWzAc5e5aB6x5ZOjtEzIXBN7zvPSakYSytnWIw6hNgSFfY5JrJ6opJYS6y 6+1i6/orYBpup537HgBWz6lQ5zb2q2Qs3wYuLkncCNvXYYS3uOHxKVSAV4xuWx0fNqA+ LpAw== X-Gm-Message-State: AOAM531FFSEzSTI7OuKcl3fuSITb2zm1ud9XGJfpxzMxfVYyy3MptX+C uYcw2FWAaqHtZv9bN8A8qosybHeCB08= X-Received: by 2002:ac8:7612:: with SMTP id t18mr17561596qtq.102.1620048744094; Mon, 03 May 2021 06:32:24 -0700 (PDT) Received: from localhost.localdomain ([191.83.208.172]) by smtp.gmail.com with ESMTPSA id 189sm5751929qkh.99.2021.05.03.06.32.22 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 06:32:23 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 3 May 2021 10:31:58 -0300 Message-Id: <20210503133200.1434-3-jamrial@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210503133200.1434-1-jamrial@gmail.com> References: <20210503133200.1434-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/5] avformat: move AVStream.{parser, need_parsing} to AVStreamInternal 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: qr7OQbVX1Ysr Those are private fields, no reason to have them exposed in a public header. Signed-off-by: James Almer --- libavformat/aacdec.c | 2 +- libavformat/aadec.c | 6 +- libavformat/acm.c | 2 +- libavformat/asfdec_f.c | 10 ++-- libavformat/av1dec.c | 2 +- libavformat/avformat.h | 4 -- libavformat/avidec.c | 16 ++--- libavformat/dtshddec.c | 2 +- libavformat/electronicarts.c | 2 +- libavformat/flacdec.c | 2 +- libavformat/flvdec.c | 4 +- libavformat/gxf.c | 6 +- libavformat/img2dec.c | 4 +- libavformat/internal.h | 4 ++ libavformat/ipudec.c | 2 +- libavformat/iv8.c | 2 +- libavformat/ivfdec.c | 2 +- libavformat/lmlm4.c | 4 +- libavformat/loasdec.c | 2 +- libavformat/lxfdec.c | 2 +- libavformat/matroskadec.c | 6 +- libavformat/mgsts.c | 2 +- libavformat/mov.c | 18 +++--- libavformat/mp3dec.c | 2 +- libavformat/mpeg.c | 2 +- libavformat/mpegts.c | 14 ++--- libavformat/msf.c | 2 +- libavformat/mtv.c | 2 +- libavformat/mxfdec.c | 8 +-- libavformat/ncdec.c | 2 +- libavformat/nsvdec.c | 4 +- libavformat/nuv.c | 2 +- libavformat/oggparseflac.c | 2 +- libavformat/oggparseogm.c | 4 +- libavformat/oggparsetheora.c | 2 +- libavformat/oggparsevp8.c | 2 +- libavformat/omadec.c | 2 +- libavformat/pva.c | 4 +- libavformat/rawdec.c | 4 +- libavformat/rmdec.c | 8 +-- libavformat/rtpdec_asf.c | 4 +- libavformat/rtsp.c | 2 +- libavformat/s337m.c | 3 +- libavformat/sdr2.c | 2 +- libavformat/segafilm.c | 2 +- libavformat/swfdec.c | 2 +- libavformat/takdec.c | 2 +- libavformat/ty.c | 4 +- libavformat/utils.c | 113 ++++++++++++++++++----------------- libavformat/wavdec.c | 6 +- libavformat/wtvdec.c | 2 +- libavformat/xvag.c | 2 +- libavformat/xwma.c | 2 +- 53 files changed, 160 insertions(+), 158 deletions(-) diff --git a/libavformat/aacdec.c b/libavformat/aacdec.c index ba468909e9..94e39f592f 100644 --- a/libavformat/aacdec.c +++ b/libavformat/aacdec.c @@ -112,7 +112,7 @@ static int adts_aac_read_header(AVFormatContext *s) st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; st->codecpar->codec_id = s->iformat->raw_codec_id; - st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; ff_id3v1_read(s); if ((s->pb->seekable & AVIO_SEEKABLE_NORMAL) && diff --git a/libavformat/aadec.c b/libavformat/aadec.c index 21051d79b8..9fe24d5d53 100644 --- a/libavformat/aadec.c +++ b/libavformat/aadec.c @@ -183,7 +183,7 @@ static int aa_read_header(AVFormatContext *s) if (!strcmp(codec_name, "mp332")) { st->codecpar->codec_id = AV_CODEC_ID_MP3; st->codecpar->sample_rate = 22050; - st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; avpriv_set_pts_info(st, 64, 8, 32000 * TIMEPREC); // encoded audio frame is MP3_FRAME_SIZE bytes (+1 with padding, unlikely) } else if (!strcmp(codec_name, "acelp85")) { @@ -192,7 +192,7 @@ static int aa_read_header(AVFormatContext *s) st->codecpar->channels = 1; st->codecpar->sample_rate = 8500; st->codecpar->bit_rate = 8500; - st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; avpriv_set_pts_info(st, 64, 8, 8500 * TIMEPREC); } else if (!strcmp(codec_name, "acelp16")) { st->codecpar->codec_id = AV_CODEC_ID_SIPR; @@ -200,7 +200,7 @@ static int aa_read_header(AVFormatContext *s) st->codecpar->channels = 1; st->codecpar->sample_rate = 16000; st->codecpar->bit_rate = 16000; - st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; avpriv_set_pts_info(st, 64, 8, 16000 * TIMEPREC); } diff --git a/libavformat/acm.c b/libavformat/acm.c index c78a408aa0..bc87b3fab9 100644 --- a/libavformat/acm.c +++ b/libavformat/acm.c @@ -54,7 +54,7 @@ static int acm_read_header(AVFormatContext *s) return AVERROR_INVALIDDATA; st->start_time = 0; st->duration = AV_RL32(st->codecpar->extradata + 4) / st->codecpar->channels; - st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); return 0; diff --git a/libavformat/asfdec_f.c b/libavformat/asfdec_f.c index 2e806dd452..053c815977 100644 --- a/libavformat/asfdec_f.c +++ b/libavformat/asfdec_f.c @@ -382,9 +382,9 @@ static int asf_read_stream_properties(AVFormatContext *s, int64_t size) st->codecpar->codec_tag = 0; } if (st->codecpar->codec_id == AV_CODEC_ID_AAC) - st->need_parsing = AVSTREAM_PARSE_NONE; + st->internal->need_parsing = AVSTREAM_PARSE_NONE; else - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; /* We have to init the frame size at some point .... */ pos2 = avio_tell(pb); if (size >= (pos2 + 8 - pos1 + 24)) { @@ -443,7 +443,7 @@ static int asf_read_stream_properties(AVFormatContext *s, int64_t size) st->codecpar->codec_tag = tag1; st->codecpar->codec_id = ff_codec_get_id(ff_codec_bmp_tags, tag1); if (tag1 == MKTAG('D', 'V', 'R', ' ')) { - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; /* issue658 contains wrong w/h and MS even puts a fake seq header * with wrong w/h in extradata while a correct one is in the stream. * maximum lameness */ @@ -453,9 +453,9 @@ static int asf_read_stream_properties(AVFormatContext *s, int64_t size) st->codecpar->extradata_size = 0; } if (st->codecpar->codec_id == AV_CODEC_ID_H264) - st->need_parsing = AVSTREAM_PARSE_FULL_ONCE; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_ONCE; if (st->codecpar->codec_id == AV_CODEC_ID_MPEG4) - st->need_parsing = AVSTREAM_PARSE_FULL_ONCE; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_ONCE; } pos2 = avio_tell(pb); avio_skip(pb, size - (pos2 - pos1 + 24)); diff --git a/libavformat/av1dec.c b/libavformat/av1dec.c index b71d5d0e19..8ca804c2a3 100644 --- a/libavformat/av1dec.c +++ b/libavformat/av1dec.c @@ -66,7 +66,7 @@ static int read_header(AVFormatContext *s, const AVRational *framerate, AVBSFCon st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; st->codecpar->codec_id = AV_CODEC_ID_AV1; - st->need_parsing = AVSTREAM_PARSE_HEADERS; + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; st->internal->avctx->framerate = *framerate; // taken from rawvideo demuxers diff --git a/libavformat/avformat.h b/libavformat/avformat.h index d796f02094..9ed6d333d3 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1008,10 +1008,6 @@ typedef struct AVStream { */ int codec_info_nb_frames; - /* av_read_frame() support */ - enum AVStreamParseType need_parsing; - struct AVCodecParserContext *parser; - /** * Stream Identifier * This is the MPEG-TS stream identifier +1 diff --git a/libavformat/avidec.c b/libavformat/avidec.c index 2f493e42a6..c68a6f08d6 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -824,19 +824,19 @@ static int avi_read_header(AVFormatContext *s) /* This is needed to get the pict type which is necessary * for generating correct pts. */ - st->need_parsing = AVSTREAM_PARSE_HEADERS; + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; if (st->codecpar->codec_id == AV_CODEC_ID_MPEG4 && ast->handler == MKTAG('X', 'V', 'I', 'D')) st->codecpar->codec_tag = MKTAG('X', 'V', 'I', 'D'); if (st->codecpar->codec_tag == MKTAG('V', 'S', 'S', 'H')) - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; if (st->codecpar->codec_id == AV_CODEC_ID_RV40) - st->need_parsing = AVSTREAM_PARSE_NONE; + st->internal->need_parsing = AVSTREAM_PARSE_NONE; if (st->codecpar->codec_id == AV_CODEC_ID_HEVC && st->codecpar->codec_tag == MKTAG('H', '2', '6', '5')) - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; if (st->codecpar->codec_id == AV_CODEC_ID_AVRN && st->codecpar->codec_tag == MKTAG('A', 'V', 'R', 'n') && @@ -880,16 +880,16 @@ static int avi_read_header(AVFormatContext *s) avio_skip(pb, 1); /* Force parsing as several audio frames can be in * one packet and timestamps refer to packet start. */ - st->need_parsing = AVSTREAM_PARSE_TIMESTAMPS; + st->internal->need_parsing = AVSTREAM_PARSE_TIMESTAMPS; /* ADTS header is in extradata, AAC without header must be * stored as exact frames. Parser not needed and it will * fail. */ if (st->codecpar->codec_id == AV_CODEC_ID_AAC && st->codecpar->extradata_size) - st->need_parsing = AVSTREAM_PARSE_NONE; + st->internal->need_parsing = AVSTREAM_PARSE_NONE; // The flac parser does not work with AVSTREAM_PARSE_TIMESTAMPS if (st->codecpar->codec_id == AV_CODEC_ID_FLAC) - st->need_parsing = AVSTREAM_PARSE_NONE; + st->internal->need_parsing = AVSTREAM_PARSE_NONE; /* AVI files with Xan DPCM audio (wrongly) declare PCM * audio in the header but have Axan as stream_code_tag. */ if (ast->handler == AV_RL32("Axan")) { @@ -1052,7 +1052,7 @@ end_of_header: AVStream *st = s->streams[i]; if ( st->codecpar->codec_id == AV_CODEC_ID_MPEG1VIDEO || st->codecpar->codec_id == AV_CODEC_ID_MPEG2VIDEO) - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; } for (i = 0; i < s->nb_streams; i++) { diff --git a/libavformat/dtshddec.c b/libavformat/dtshddec.c index 48d3afbebd..2900623690 100644 --- a/libavformat/dtshddec.c +++ b/libavformat/dtshddec.c @@ -65,7 +65,7 @@ static int dtshd_read_header(AVFormatContext *s) return AVERROR(ENOMEM); st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; st->codecpar->codec_id = AV_CODEC_ID_DTS; - st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; for (;;) { chunk_type = avio_rb64(pb); diff --git a/libavformat/electronicarts.c b/libavformat/electronicarts.c index 8080ee7e41..4d0fddab3d 100644 --- a/libavformat/electronicarts.c +++ b/libavformat/electronicarts.c @@ -503,7 +503,7 @@ static int init_video_stream(AVFormatContext *s, VideoProperties *video) st->codecpar->codec_id = video->codec; // parsing is necessary to make FFmpeg generate correct timestamps if (st->codecpar->codec_id == AV_CODEC_ID_MPEG2VIDEO) - st->need_parsing = AVSTREAM_PARSE_HEADERS; + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; st->codecpar->codec_tag = 0; /* no fourcc */ st->codecpar->width = video->width; st->codecpar->height = video->height; diff --git a/libavformat/flacdec.c b/libavformat/flacdec.c index 4ed523f309..d4158032e4 100644 --- a/libavformat/flacdec.c +++ b/libavformat/flacdec.c @@ -56,7 +56,7 @@ static int flac_read_header(AVFormatContext *s) return AVERROR(ENOMEM); st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; st->codecpar->codec_id = AV_CODEC_ID_FLAC; - st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; /* the parameters will be extracted from the compressed bitstream */ /* if fLaC marker is not found, assume there is no header */ diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c index 718d690421..e6c2877a74 100644 --- a/libavformat/flvdec.c +++ b/libavformat/flvdec.c @@ -271,7 +271,7 @@ static void flv_set_audio_codec(AVFormatContext *s, AVStream *astream, break; case FLV_CODECID_MP3: apar->codec_id = AV_CODEC_ID_MP3; - astream->need_parsing = AVSTREAM_PARSE_FULL; + astream->internal->need_parsing = AVSTREAM_PARSE_FULL; break; case FLV_CODECID_NELLYMOSER_8KHZ_MONO: // in case metadata does not otherwise declare samplerate @@ -362,7 +362,7 @@ static int flv_set_video_codec(AVFormatContext *s, AVStream *vstream, break; case FLV_CODECID_H264: par->codec_id = AV_CODEC_ID_H264; - vstream->need_parsing = AVSTREAM_PARSE_HEADERS; + vstream->internal->need_parsing = AVSTREAM_PARSE_HEADERS; ret = 3; // not 4, reading packet type will consume one byte break; case FLV_CODECID_MPEG4: diff --git a/libavformat/gxf.c b/libavformat/gxf.c index 53fa302828..7d23cbd692 100644 --- a/libavformat/gxf.c +++ b/libavformat/gxf.c @@ -130,13 +130,13 @@ static int get_sindex(AVFormatContext *s, int id, int format) { case 20: st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; st->codecpar->codec_id = AV_CODEC_ID_MPEG2VIDEO; - st->need_parsing = AVSTREAM_PARSE_HEADERS; //get keyframe flag etc. + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; //get keyframe flag etc. break; case 22: case 23: st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; st->codecpar->codec_id = AV_CODEC_ID_MPEG1VIDEO; - st->need_parsing = AVSTREAM_PARSE_HEADERS; //get keyframe flag etc. + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; //get keyframe flag etc. break; case 9: st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; @@ -169,7 +169,7 @@ static int get_sindex(AVFormatContext *s, int id, int format) { case 29: /* AVCHD */ st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; st->codecpar->codec_id = AV_CODEC_ID_H264; - st->need_parsing = AVSTREAM_PARSE_HEADERS; + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; break; // timecode tracks: case 7: diff --git a/libavformat/img2dec.c b/libavformat/img2dec.c index d7a7cdaa16..aaf2ac362c 100644 --- a/libavformat/img2dec.c +++ b/libavformat/img2dec.c @@ -209,7 +209,7 @@ int ff_img_read_header(AVFormatContext *s1) s->is_pipe = 0; else { s->is_pipe = 1; - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; } if (s->ts_from_file == 2) { @@ -482,7 +482,7 @@ int ff_img_read_packet(AVFormatContext *s1, AVPacket *pkt) return AVERROR_EOF; if (s->frame_size > 0) { size[0] = s->frame_size; - } else if (!s1->streams[0]->parser) { + } else if (!s1->streams[0]->internal->parser) { size[0] = avio_size(s1->pb); } else { size[0] = 4096; diff --git a/libavformat/internal.h b/libavformat/internal.h index 6af38720c8..928ec6edf2 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -373,6 +373,10 @@ struct AVStreamInternal { * Number of packets to buffer for codec probing */ int probe_packets; + + /* av_read_frame() support */ + enum AVStreamParseType need_parsing; + struct AVCodecParserContext *parser; }; #ifdef __GNUC__ diff --git a/libavformat/ipudec.c b/libavformat/ipudec.c index 283c798751..b76371b58c 100644 --- a/libavformat/ipudec.c +++ b/libavformat/ipudec.c @@ -62,7 +62,7 @@ static int ipu_read_header(AVFormatContext *s) st->start_time = 0; st->duration = st->nb_frames = avio_rl32(pb); - st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; avpriv_set_pts_info(st, 64, 1, 25); return 0; diff --git a/libavformat/iv8.c b/libavformat/iv8.c index 7237e16172..b06797cbf3 100644 --- a/libavformat/iv8.c +++ b/libavformat/iv8.c @@ -47,7 +47,7 @@ static int read_header(AVFormatContext *s) st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; st->codecpar->codec_id = AV_CODEC_ID_MPEG4; - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; avpriv_set_pts_info(st, 64, 1, 90000); return 0; diff --git a/libavformat/ivfdec.c b/libavformat/ivfdec.c index 3e1ea52cbf..26717c4999 100644 --- a/libavformat/ivfdec.c +++ b/libavformat/ivfdec.c @@ -56,7 +56,7 @@ static int read_header(AVFormatContext *s) st->duration = avio_rl32(s->pb); avio_skip(s->pb, 4); // unused - st->need_parsing = AVSTREAM_PARSE_HEADERS; + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; if (!time_base.den || !time_base.num) { av_log(s, AV_LOG_ERROR, "Invalid frame rate\n"); diff --git a/libavformat/lmlm4.c b/libavformat/lmlm4.c index 99cba73a00..dbeaceab9c 100644 --- a/libavformat/lmlm4.c +++ b/libavformat/lmlm4.c @@ -67,14 +67,14 @@ static int lmlm4_read_header(AVFormatContext *s) return AVERROR(ENOMEM); st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; st->codecpar->codec_id = AV_CODEC_ID_MPEG4; - st->need_parsing = AVSTREAM_PARSE_HEADERS; + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; avpriv_set_pts_info(st, 64, 1001, 30000); if (!(st = avformat_new_stream(s, NULL))) return AVERROR(ENOMEM); st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; st->codecpar->codec_id = AV_CODEC_ID_MP2; - st->need_parsing = AVSTREAM_PARSE_HEADERS; + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; /* the parameters will be extracted from the compressed bitstream */ return 0; diff --git a/libavformat/loasdec.c b/libavformat/loasdec.c index 490dd68ee0..97fabefcd7 100644 --- a/libavformat/loasdec.c +++ b/libavformat/loasdec.c @@ -75,7 +75,7 @@ static int loas_read_header(AVFormatContext *s) st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; st->codecpar->codec_id = s->iformat->raw_codec_id; - st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; //LCM of all possible AAC sample rates avpriv_set_pts_info(st, 64, 1, 28224000); diff --git a/libavformat/lxfdec.c b/libavformat/lxfdec.c index ebb745d360..79ccc77747 100644 --- a/libavformat/lxfdec.c +++ b/libavformat/lxfdec.c @@ -262,7 +262,7 @@ static int lxf_read_header(AVFormatContext *s) st->codecpar->bit_rate = 1000000 * ((video_params >> 14) & 0xFF); st->codecpar->codec_tag = video_params & 0xF; st->codecpar->codec_id = ff_codec_get_id(lxf_tags, st->codecpar->codec_tag); - st->need_parsing = AVSTREAM_PARSE_HEADERS; + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; av_log(s, AV_LOG_DEBUG, "record: %x = %i-%02i-%02i\n", record_date, 1900 + (record_date & 0x7F), (record_date >> 7) & 0xF, diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 63faea4e35..8523261760 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2806,7 +2806,7 @@ static int matroska_parse_tracks(AVFormatContext *s) 255); } if (st->codecpar->codec_id != AV_CODEC_ID_HEVC) - st->need_parsing = AVSTREAM_PARSE_HEADERS; + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; if (track->default_duration) { av_reduce(&st->avg_frame_rate.num, &st->avg_frame_rate.den, @@ -2864,9 +2864,9 @@ static int matroska_parse_tracks(AVFormatContext *s) if (st->codecpar->codec_id == AV_CODEC_ID_MP3 || st->codecpar->codec_id == AV_CODEC_ID_MLP || st->codecpar->codec_id == AV_CODEC_ID_TRUEHD) - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; else if (st->codecpar->codec_id != AV_CODEC_ID_AAC) - st->need_parsing = AVSTREAM_PARSE_HEADERS; + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; if (track->codec_delay > 0) { st->codecpar->initial_padding = av_rescale_q(track->codec_delay, (AVRational){1, 1000000000}, diff --git a/libavformat/mgsts.c b/libavformat/mgsts.c index 02f65e7b1b..5886d2475a 100644 --- a/libavformat/mgsts.c +++ b/libavformat/mgsts.c @@ -50,7 +50,7 @@ static int read_header(AVFormatContext *s) if (!st) return AVERROR(ENOMEM); - st->need_parsing = AVSTREAM_PARSE_HEADERS; + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; st->start_time = 0; st->nb_frames = st->duration = avio_rb32(pb); diff --git a/libavformat/mov.c b/libavformat/mov.c index d2d34d574f..49ba951bb7 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -2186,7 +2186,7 @@ static void mov_parse_stsd_audio(MOVContext *c, AVIOContext *pb, switch (st->codecpar->codec_id) { case AV_CODEC_ID_MP2: case AV_CODEC_ID_MP3: - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; break; } } @@ -2424,10 +2424,10 @@ static int mov_finalize_stsd_codec(MOVContext *c, AVIOContext *pb, case AV_CODEC_ID_VC1: case AV_CODEC_ID_VP8: case AV_CODEC_ID_VP9: - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; break; case AV_CODEC_ID_AV1: - st->need_parsing = AVSTREAM_PARSE_HEADERS; + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; break; default: break; @@ -2773,8 +2773,8 @@ static int mov_read_stss(MOVContext *c, AVIOContext *pb, MOVAtom atom) if (!entries) { sc->keyframe_absent = 1; - if (!st->need_parsing && st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) - st->need_parsing = AVSTREAM_PARSE_HEADERS; + if (!st->internal->need_parsing && st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; return 0; } if (sc->keyframes) @@ -4317,7 +4317,7 @@ static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom) && sc->stts_count > 3 && sc->stts_count*10 > st->nb_frames && sc->time_scale == st->codecpar->sample_rate) { - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; } /* Do not need those anymore. */ av_freep(&sc->chunk_offsets); @@ -7644,7 +7644,7 @@ static int mov_read_header(AVFormatContext *s) mov->handbrake_version <= 1000000*0 + 1000*10 + 2 && // 0.10.2 st->codecpar->codec_id == AV_CODEC_ID_MP3) { av_log(s, AV_LOG_VERBOSE, "Forcing full parsing for mp3 stream\n"); - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; } } @@ -7952,9 +7952,9 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt) sc->has_palette = 0; } } - if (st->codecpar->codec_id == AV_CODEC_ID_MP3 && !st->need_parsing && pkt->size > 4) { + if (st->codecpar->codec_id == AV_CODEC_ID_MP3 && !st->internal->need_parsing && pkt->size > 4) { if (ff_mpa_check_header(AV_RB32(pkt->data)) < 0) - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; } } diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c index 611b423aea..b12cd31148 100644 --- a/libavformat/mp3dec.c +++ b/libavformat/mp3dec.c @@ -374,7 +374,7 @@ static int mp3_read_header(AVFormatContext *s) st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; st->codecpar->codec_id = AV_CODEC_ID_MP3; - st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; st->start_time = 0; // lcm of all mp3 sample rates diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c index fb1d54e52f..178e71d891 100644 --- a/libavformat/mpeg.c +++ b/libavformat/mpeg.c @@ -623,7 +623,7 @@ skip: st->codecpar->sample_rate = 8000; } st->internal->request_probe = request_probe; - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; found: if (st->discard >= AVDISCARD_ALL) diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index 0ed108ce89..fb454b9fd3 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -904,7 +904,7 @@ static int mpegts_set_stream_info(AVStream *st, PESContext *pes, st->priv_data = pes; st->codecpar->codec_type = AVMEDIA_TYPE_DATA; st->codecpar->codec_id = AV_CODEC_ID_NONE; - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; pes->st = st; pes->stream_type = stream_type; @@ -942,7 +942,7 @@ static int mpegts_set_stream_info(AVStream *st, PESContext *pes, sub_st->priv_data = sub_pes; sub_st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; sub_st->codecpar->codec_id = AV_CODEC_ID_AC3; - sub_st->need_parsing = AVSTREAM_PARSE_FULL; + sub_st->internal->need_parsing = AVSTREAM_PARSE_FULL; sub_pes->sub_st = pes->sub_st = sub_st; } } @@ -1717,10 +1717,10 @@ static void m4sl_cb(MpegTSFilter *filter, const uint8_t *section, ff_mp4_read_dec_config_descr(s, st, &pb); if (st->codecpar->codec_id == AV_CODEC_ID_AAC && st->codecpar->extradata_size > 0) - st->need_parsing = 0; + st->internal->need_parsing = 0; if (st->codecpar->codec_id == AV_CODEC_ID_H264 && st->codecpar->extradata_size > 0) - st->need_parsing = 0; + st->internal->need_parsing = 0; st->codecpar->codec_type = avcodec_get_type(st->codecpar->codec_id); st->internal->need_context_update = 1; @@ -1826,7 +1826,7 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type ff_mp4_read_dec_config_descr(fc, st, &pb); if (st->codecpar->codec_id == AV_CODEC_ID_AAC && st->codecpar->extradata_size > 0) { - st->need_parsing = 0; + st->internal->need_parsing = 0; st->internal->need_context_update = 1; } if (st->codecpar->codec_id == AV_CODEC_ID_MPEG4SYSTEMS) @@ -1848,7 +1848,7 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type ff_mp4_read_dec_config_descr(fc, st, &pb); if (st->codecpar->codec_id == AV_CODEC_ID_AAC && st->codecpar->extradata_size > 0) { - st->internal->request_probe = st->need_parsing = 0; + st->internal->request_probe = st->internal->need_parsing = 0; st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; st->internal->need_context_update = 1; } @@ -2035,7 +2035,7 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type } else { avpriv_request_sample(fc, "Opus in MPEG-TS - channel_config_code > 0x8"); } - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; st->internal->need_context_update = 1; } } diff --git a/libavformat/msf.c b/libavformat/msf.c index ca2b3a3bf5..43a7f7b616 100644 --- a/libavformat/msf.c +++ b/libavformat/msf.c @@ -80,7 +80,7 @@ static int msf_read_header(AVFormatContext *s) AV_WL16(st->codecpar->extradata+8, codec == 4 ? 1 : 0); /* joint stereo (repeat?) */ AV_WL16(st->codecpar->extradata+10, 1); st->codecpar->codec_id = AV_CODEC_ID_ATRAC3; break; - case 7: st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + case 7: st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; st->codecpar->codec_id = AV_CODEC_ID_MP3; break; default: avpriv_request_sample(s, "Codec %d", codec); diff --git a/libavformat/mtv.c b/libavformat/mtv.c index 26a0fd0ea4..d33561b6ec 100644 --- a/libavformat/mtv.c +++ b/libavformat/mtv.c @@ -185,7 +185,7 @@ static int mtv_read_header(AVFormatContext *s) st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; st->codecpar->codec_id = AV_CODEC_ID_MP3; st->codecpar->bit_rate = mtv->audio_br; - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; // Jump over header diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index f0c2c0b15f..3bf480a3a6 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -2593,7 +2593,7 @@ static int mxf_parse_structural_metadata(MXFContext *mxf) } } } - st->need_parsing = AVSTREAM_PARSE_HEADERS; + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; if (material_track->sequence->origin) { av_dict_set_int(&st->metadata, "material_track_origin", material_track->sequence->origin, 0); } @@ -2658,7 +2658,7 @@ static int mxf_parse_structural_metadata(MXFContext *mxf) else if (descriptor->bits_per_sample == 32) st->codecpar->codec_id = AV_CODEC_ID_PCM_S32BE; } else if (st->codecpar->codec_id == AV_CODEC_ID_MP2) { - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; } st->codecpar->bits_per_coded_sample = av_get_bits_per_sample(st->codecpar->codec_id); } else if (st->codecpar->codec_type == AVMEDIA_TYPE_DATA) { @@ -2692,7 +2692,7 @@ static int mxf_parse_structural_metadata(MXFContext *mxf) } if (st->codecpar->codec_type != AVMEDIA_TYPE_DATA && source_track->wrapping != FrameWrapped) { /* TODO: decode timestamps */ - st->need_parsing = AVSTREAM_PARSE_TIMESTAMPS; + st->internal->need_parsing = AVSTREAM_PARSE_TIMESTAMPS; } } @@ -3660,7 +3660,7 @@ static int mxf_read_packet(AVFormatContext *s, AVPacket *pkt) if (next_ofs <= 0) { // If we have no way to packetize the data, then return it in chunks... if (klv.next_klv - klv.length == pos && max_data_size > MXF_MAX_CHUNK_SIZE) { - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; avpriv_request_sample(s, "Huge KLV without proper index in non-frame wrapped essence"); } size = FFMIN(max_data_size, MXF_MAX_CHUNK_SIZE); diff --git a/libavformat/ncdec.c b/libavformat/ncdec.c index ff5eb189bc..3fe189e729 100644 --- a/libavformat/ncdec.c +++ b/libavformat/ncdec.c @@ -53,7 +53,7 @@ static int nc_read_header(AVFormatContext *s) st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; st->codecpar->codec_id = AV_CODEC_ID_MPEG4; - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; avpriv_set_pts_info(st, 64, 1, 100); diff --git a/libavformat/nsvdec.c b/libavformat/nsvdec.c index b79d0dcc62..7dcc218546 100644 --- a/libavformat/nsvdec.c +++ b/libavformat/nsvdec.c @@ -462,7 +462,7 @@ static int nsv_parse_NSVs_header(AVFormatContext *s) st->codecpar->codec_tag = atag; st->codecpar->codec_id = ff_codec_get_id(nsv_codec_audio_tags, atag); - st->need_parsing = AVSTREAM_PARSE_FULL; /* for PCM we will read a chunk later and put correct info */ + st->internal->need_parsing = AVSTREAM_PARSE_FULL; /* for PCM we will read a chunk later and put correct info */ /* set timebase to common denominator of ms and framerate */ avpriv_set_pts_info(st, 64, 1, framerate.num*1000); @@ -615,7 +615,7 @@ null_chunk_retry: asize-=4; av_log(s, AV_LOG_TRACE, "NSV RAWAUDIO: bps %d, nchan %d, srate %d\n", bps, channels, samplerate); if (fill_header) { - st[NSV_ST_AUDIO]->need_parsing = AVSTREAM_PARSE_NONE; /* we know everything */ + st[NSV_ST_AUDIO]->internal->need_parsing = AVSTREAM_PARSE_NONE; /* we know everything */ if (bps != 16) { av_log(s, AV_LOG_TRACE, "NSV AUDIO bit/sample != 16 (%d)!!!\n", bps); } diff --git a/libavformat/nuv.c b/libavformat/nuv.c index aec87f45fe..1d25d3b125 100644 --- a/libavformat/nuv.c +++ b/libavformat/nuv.c @@ -132,7 +132,7 @@ static int get_codec_data(AVFormatContext *s, AVIOContext *pb, AVStream *vst, } ast->codecpar->codec_id = id; - ast->need_parsing = AVSTREAM_PARSE_FULL; + ast->internal->need_parsing = AVSTREAM_PARSE_FULL; } else avio_skip(pb, 4 * 4); diff --git a/libavformat/oggparseflac.c b/libavformat/oggparseflac.c index 4e85b05c67..15eeca56aa 100644 --- a/libavformat/oggparseflac.c +++ b/libavformat/oggparseflac.c @@ -59,7 +59,7 @@ flac_header (AVFormatContext * s, int idx) st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; st->codecpar->codec_id = AV_CODEC_ID_FLAC; - st->need_parsing = AVSTREAM_PARSE_HEADERS; + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; if ((ret = ff_alloc_extradata(st->codecpar, FLAC_STREAMINFO_SIZE)) < 0) return ret; diff --git a/libavformat/oggparseogm.c b/libavformat/oggparseogm.c index 469b229995..a8319b9dfa 100644 --- a/libavformat/oggparseogm.c +++ b/libavformat/oggparseogm.c @@ -60,7 +60,7 @@ ogm_header(AVFormatContext *s, int idx) st->codecpar->codec_id = ff_codec_get_id(ff_codec_bmp_tags, tag); st->codecpar->codec_tag = tag; if (st->codecpar->codec_id == AV_CODEC_ID_MPEG4) - st->need_parsing = AVSTREAM_PARSE_HEADERS; + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; } else if (bytestream2_peek_byte(&p) == 't') { st->codecpar->codec_type = AVMEDIA_TYPE_SUBTITLE; st->codecpar->codec_id = AV_CODEC_ID_TEXT; @@ -76,7 +76,7 @@ ogm_header(AVFormatContext *s, int idx) st->codecpar->codec_id = ff_codec_get_id(ff_codec_wav_tags, cid); // our parser completely breaks AAC in Ogg if (st->codecpar->codec_id != AV_CODEC_ID_AAC) - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; } size = bytestream2_get_le32(&p); diff --git a/libavformat/oggparsetheora.c b/libavformat/oggparsetheora.c index d1064e4328..28684f6ea9 100644 --- a/libavformat/oggparsetheora.c +++ b/libavformat/oggparsetheora.c @@ -112,7 +112,7 @@ static int theora_header(AVFormatContext *s, int idx) st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; st->codecpar->codec_id = AV_CODEC_ID_THEORA; - st->need_parsing = AVSTREAM_PARSE_HEADERS; + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; } break; case 0x81: diff --git a/libavformat/oggparsevp8.c b/libavformat/oggparsevp8.c index b76ac71cc5..85b3627c9c 100644 --- a/libavformat/oggparsevp8.c +++ b/libavformat/oggparsevp8.c @@ -61,7 +61,7 @@ static int vp8_header(AVFormatContext *s, int idx) avpriv_set_pts_info(st, 64, framerate.den, framerate.num); st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; st->codecpar->codec_id = AV_CODEC_ID_VP8; - st->need_parsing = AVSTREAM_PARSE_HEADERS; + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; break; case 0x02: if (p[6] != 0x20) diff --git a/libavformat/omadec.c b/libavformat/omadec.c index 1c2b04212c..8891cfc4b6 100644 --- a/libavformat/omadec.c +++ b/libavformat/omadec.c @@ -520,7 +520,7 @@ static int oma_read_header(AVFormatContext *s) avpriv_set_pts_info(st, 64, 1, samplerate); break; case OMA_CODECID_MP3: - st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; framesize = 1024; break; case OMA_CODECID_LPCM: diff --git a/libavformat/pva.c b/libavformat/pva.c index 8e3013a496..ff30746bcb 100644 --- a/libavformat/pva.c +++ b/libavformat/pva.c @@ -61,7 +61,7 @@ static int pva_read_header(AVFormatContext *s) { return AVERROR(ENOMEM); st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; st->codecpar->codec_id = AV_CODEC_ID_MPEG2VIDEO; - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; avpriv_set_pts_info(st, 32, 1, 90000); av_add_index_entry(st, 0, 0, 0, 0, AVINDEX_KEYFRAME); @@ -69,7 +69,7 @@ static int pva_read_header(AVFormatContext *s) { return AVERROR(ENOMEM); st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; st->codecpar->codec_id = AV_CODEC_ID_MP2; - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; avpriv_set_pts_info(st, 33, 1, 90000); av_add_index_entry(st, 0, 0, 0, 0, AVINDEX_KEYFRAME); diff --git a/libavformat/rawdec.c b/libavformat/rawdec.c index c162b52940..a1f593c66a 100644 --- a/libavformat/rawdec.c +++ b/libavformat/rawdec.c @@ -60,7 +60,7 @@ int ff_raw_audio_read_header(AVFormatContext *s) return AVERROR(ENOMEM); st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; st->codecpar->codec_id = s->iformat->raw_codec_id; - st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; st->start_time = 0; /* the parameters will be extracted from the compressed bitstream */ @@ -83,7 +83,7 @@ int ff_raw_video_read_header(AVFormatContext *s) st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; st->codecpar->codec_id = s->iformat->raw_codec_id; - st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; st->internal->avctx->framerate = s1->framerate; avpriv_set_pts_info(st, 64, 1, 1200000); diff --git a/libavformat/rmdec.c b/libavformat/rmdec.c index 538f549495..68b5c3b75a 100644 --- a/libavformat/rmdec.c +++ b/libavformat/rmdec.c @@ -204,7 +204,7 @@ static int rm_read_audio_stream_info(AVFormatContext *s, AVIOContext *pb, switch (st->codecpar->codec_id) { case AV_CODEC_ID_AC3: - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; break; case AV_CODEC_ID_RA_288: st->codecpar->extradata_size= 0; @@ -213,7 +213,7 @@ static int rm_read_audio_stream_info(AVFormatContext *s, AVIOContext *pb, st->codecpar->block_align = coded_framesize; break; case AV_CODEC_ID_COOK: - st->need_parsing = AVSTREAM_PARSE_HEADERS; + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; case AV_CODEC_ID_ATRAC3: case AV_CODEC_ID_SIPR: if (read_all) { @@ -237,7 +237,7 @@ static int rm_read_audio_stream_info(AVFormatContext *s, AVIOContext *pb, return -1; } st->codecpar->block_align = ff_sipr_subpk_size[flavor]; - st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; } else { if(sub_packet_size <= 0){ av_log(s, AV_LOG_ERROR, "sub_packet_size is invalid\n"); @@ -390,7 +390,7 @@ int ff_rm_read_mdpr_codecdata(AVFormatContext *s, AVIOContext *pb, avio_skip(pb, 2); // looks like bits per sample avio_skip(pb, 4); // always zero? st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; - st->need_parsing = AVSTREAM_PARSE_TIMESTAMPS; + st->internal->need_parsing = AVSTREAM_PARSE_TIMESTAMPS; fps = avio_rb32(pb); if ((ret = rm_read_extradata(s, pb, st->codecpar, codec_data_size - (avio_tell(pb) - codec_pos))) < 0) diff --git a/libavformat/rtpdec_asf.c b/libavformat/rtpdec_asf.c index 2749ad1380..f6e7f00bbe 100644 --- a/libavformat/rtpdec_asf.c +++ b/libavformat/rtpdec_asf.c @@ -167,8 +167,8 @@ static int asfrtp_parse_sdp_line(AVFormatContext *s, int stream_index, if (s->streams[stream_index]->id == rt->asf_ctx->streams[i]->id) { avcodec_parameters_copy(s->streams[stream_index]->codecpar, rt->asf_ctx->streams[i]->codecpar); - s->streams[stream_index]->need_parsing = - rt->asf_ctx->streams[i]->need_parsing; + s->streams[stream_index]->internal->need_parsing = + rt->asf_ctx->streams[i]->internal->need_parsing; avpriv_set_pts_info(s->streams[stream_index], 32, 1, 1000); } } diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index 3899c26fa4..9f509a229f 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -218,7 +218,7 @@ static void init_rtp_handler(const RTPDynamicProtocolHandler *handler, par->codec_id = handler->codec_id; rtsp_st->dynamic_handler = handler; if (st) - st->need_parsing = handler->need_parsing; + st->internal->need_parsing = handler->need_parsing; if (handler->priv_data_size) { rtsp_st->dynamic_protocol_context = av_mallocz(handler->priv_data_size); if (!rtsp_st->dynamic_protocol_context) diff --git a/libavformat/s337m.c b/libavformat/s337m.c index 37e93db7d5..e1d921c303 100644 --- a/libavformat/s337m.c +++ b/libavformat/s337m.c @@ -20,6 +20,7 @@ #include "libavutil/intreadwrite.h" #include "avformat.h" +#include "internal.h" #include "spdif.h" #define MARKER_16LE 0x72F81F4E @@ -180,7 +181,7 @@ static int s337m_read_packet(AVFormatContext *s, AVPacket *pkt) } st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; st->codecpar->codec_id = codec; - st->need_parsing = AVSTREAM_PARSE_HEADERS; + st->internal->need_parsing = AVSTREAM_PARSE_HEADERS; } return 0; diff --git a/libavformat/sdr2.c b/libavformat/sdr2.c index 373116a4a6..0f506fd074 100644 --- a/libavformat/sdr2.c +++ b/libavformat/sdr2.c @@ -51,7 +51,7 @@ static int sdr2_read_header(AVFormatContext *s) st->codecpar->width = avio_rl32(s->pb); st->codecpar->height = avio_rl32(s->pb); st->codecpar->codec_id = AV_CODEC_ID_H264; - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; ast->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; ast->codecpar->channels = 1; diff --git a/libavformat/segafilm.c b/libavformat/segafilm.c index 4b4327a179..05b4d9e6a8 100644 --- a/libavformat/segafilm.c +++ b/libavformat/segafilm.c @@ -183,7 +183,7 @@ static int film_read_header(AVFormatContext *s) if (film->audio_type == AV_CODEC_ID_ADPCM_ADX) { st->codecpar->bits_per_coded_sample = 18 * 8 / 32; st->codecpar->block_align = st->codecpar->channels * 18; - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; } else { st->codecpar->bits_per_coded_sample = film->audio_bits; st->codecpar->block_align = st->codecpar->channels * diff --git a/libavformat/swfdec.c b/libavformat/swfdec.c index f5a98e8b53..8eda80b4f6 100644 --- a/libavformat/swfdec.c +++ b/libavformat/swfdec.c @@ -204,7 +204,7 @@ static AVStream *create_new_audio_stream(AVFormatContext *s, int id, int info) } ast->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; ast->codecpar->codec_id = ff_codec_get_id(swf_audio_codec_tags, info>>4 & 15); - ast->need_parsing = AVSTREAM_PARSE_FULL; + ast->internal->need_parsing = AVSTREAM_PARSE_FULL; sample_rate_code = info>>2 & 3; sample_size_code = info>>1 & 1; if (!sample_size_code && ast->codecpar->codec_id == AV_CODEC_ID_PCM_S16LE) diff --git a/libavformat/takdec.c b/libavformat/takdec.c index 46c500efef..cbb9a9345e 100644 --- a/libavformat/takdec.c +++ b/libavformat/takdec.c @@ -65,7 +65,7 @@ static int tak_read_header(AVFormatContext *s) st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; st->codecpar->codec_id = AV_CODEC_ID_TAK; - st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; tc->mlast_frame = 0; if (avio_rl32(pb) != MKTAG('t', 'B', 'a', 'K')) { diff --git a/libavformat/ty.c b/libavformat/ty.c index 8830467f99..5bb5d4267b 100644 --- a/libavformat/ty.c +++ b/libavformat/ty.c @@ -308,7 +308,7 @@ static int ty_read_header(AVFormatContext *s) return AVERROR(ENOMEM); st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; st->codecpar->codec_id = AV_CODEC_ID_MPEG2VIDEO; - st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; avpriv_set_pts_info(st, 64, 1, 90000); ast = avformat_new_stream(s, NULL); @@ -318,7 +318,7 @@ static int ty_read_header(AVFormatContext *s) if (ty->audio_type == TIVO_AUDIO_MPEG) { ast->codecpar->codec_id = AV_CODEC_ID_MP2; - ast->need_parsing = AVSTREAM_PARSE_FULL_RAW; + ast->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; } else { ast->codecpar->codec_id = AV_CODEC_ID_AC3; } diff --git a/libavformat/utils.c b/libavformat/utils.c index df6d9b5cf6..3ccebce2b9 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -123,7 +123,7 @@ int64_t av_stream_get_end_pts(const AVStream *st) struct AVCodecParserContext *av_stream_get_parser(const AVStream *st) { - return st->parser; + return st->internal->parser; } void av_format_inject_global_side_data(AVFormatContext *s) @@ -457,9 +457,9 @@ static int update_stream_avctx(AVFormatContext *s) continue; /* close parser, because it depends on the codec */ - if (st->parser && st->internal->avctx->codec_id != st->codecpar->codec_id) { - av_parser_close(st->parser); - st->parser = NULL; + if (st->internal->parser && st->internal->avctx->codec_id != st->codecpar->codec_id) { + av_parser_close(st->internal->parser); + st->internal->parser = NULL; } /* update internal codec context, for the parser */ @@ -1256,7 +1256,7 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st, /* Correct timestamps with byte offset if demuxers only have timestamps * on packet boundaries */ - if (pc && st->need_parsing == AVSTREAM_PARSE_TIMESTAMPS && pkt->size) { + if (pc && st->internal->need_parsing == AVSTREAM_PARSE_TIMESTAMPS && pkt->size) { /* this will estimate bitrate based on this frame's duration and size */ offset = av_rescale(pc->offset, pkt->duration, pkt->size); if (pkt->pts != AV_NOPTS_VALUE) @@ -1365,9 +1365,9 @@ static int parse_packet(AVFormatContext *s, AVPacket *pkt, int size = pkt->size; int ret = 0, got_output = flush; - if (!size && !flush && st->parser->flags & PARSER_FLAG_COMPLETE_FRAMES) { + if (!size && !flush && st->internal->parser->flags & PARSER_FLAG_COMPLETE_FRAMES) { // preserve 0-size sync packets - compute_pkt_fields(s, st, st->parser, pkt, AV_NOPTS_VALUE, AV_NOPTS_VALUE); + compute_pkt_fields(s, st, st->internal->parser, pkt, AV_NOPTS_VALUE, AV_NOPTS_VALUE); } while (size > 0 || (flush && got_output)) { @@ -1375,7 +1375,7 @@ static int parse_packet(AVFormatContext *s, AVPacket *pkt, int64_t next_pts = pkt->pts; int64_t next_dts = pkt->dts; - len = av_parser_parse2(st->parser, st->internal->avctx, + len = av_parser_parse2(st->internal->parser, st->internal->avctx, &out_pkt->data, &out_pkt->size, data, size, pkt->pts, pkt->dts, pkt->pos); @@ -1394,7 +1394,7 @@ static int parse_packet(AVFormatContext *s, AVPacket *pkt, if (pkt->buf && out_pkt->data == pkt->data) { /* reference pkt->buf only when out_pkt->data is guaranteed to point * to data in it and not in the parser's internal buffer. */ - /* XXX: Ensure this is the case with all parsers when st->parser->flags + /* XXX: Ensure this is the case with all parsers when st->internal->parser->flags * is PARSER_FLAG_COMPLETE_FRAMES and check for that instead? */ out_pkt->buf = av_buffer_ref(pkt->buf); if (!out_pkt->buf) { @@ -1415,11 +1415,11 @@ static int parse_packet(AVFormatContext *s, AVPacket *pkt, } /* set the duration */ - out_pkt->duration = (st->parser->flags & PARSER_FLAG_COMPLETE_FRAMES) ? pkt->duration : 0; + out_pkt->duration = (st->internal->parser->flags & PARSER_FLAG_COMPLETE_FRAMES) ? pkt->duration : 0; if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { if (st->internal->avctx->sample_rate > 0) { out_pkt->duration = - av_rescale_q_rnd(st->parser->duration, + av_rescale_q_rnd(st->internal->parser->duration, (AVRational) { 1, st->internal->avctx->sample_rate }, st->time_base, AV_ROUND_DOWN); @@ -1427,23 +1427,23 @@ static int parse_packet(AVFormatContext *s, AVPacket *pkt, } out_pkt->stream_index = st->index; - out_pkt->pts = st->parser->pts; - out_pkt->dts = st->parser->dts; - out_pkt->pos = st->parser->pos; + out_pkt->pts = st->internal->parser->pts; + out_pkt->dts = st->internal->parser->dts; + out_pkt->pos = st->internal->parser->pos; out_pkt->flags |= pkt->flags & AV_PKT_FLAG_DISCARD; - if (st->need_parsing == AVSTREAM_PARSE_FULL_RAW) - out_pkt->pos = st->parser->frame_offset; + if (st->internal->need_parsing == AVSTREAM_PARSE_FULL_RAW) + out_pkt->pos = st->internal->parser->frame_offset; - if (st->parser->key_frame == 1 || - (st->parser->key_frame == -1 && - st->parser->pict_type == AV_PICTURE_TYPE_I)) + if (st->internal->parser->key_frame == 1 || + (st->internal->parser->key_frame == -1 && + st->internal->parser->pict_type == AV_PICTURE_TYPE_I)) out_pkt->flags |= AV_PKT_FLAG_KEY; - if (st->parser->key_frame == -1 && st->parser->pict_type ==AV_PICTURE_TYPE_NONE && (pkt->flags&AV_PKT_FLAG_KEY)) + if (st->internal->parser->key_frame == -1 && st->internal->parser->pict_type ==AV_PICTURE_TYPE_NONE && (pkt->flags&AV_PKT_FLAG_KEY)) out_pkt->flags |= AV_PKT_FLAG_KEY; - compute_pkt_fields(s, st, st->parser, out_pkt, next_dts, next_pts); + compute_pkt_fields(s, st, st->internal->parser, out_pkt, next_dts, next_pts); ret = avpriv_packet_list_put(&s->internal->parse_queue, &s->internal->parse_queue_end, @@ -1454,8 +1454,8 @@ static int parse_packet(AVFormatContext *s, AVPacket *pkt, /* end of the stream => close and free the parser */ if (flush) { - av_parser_close(st->parser); - st->parser = NULL; + av_parser_close(st->internal->parser); + st->internal->parser = NULL; } fail: @@ -1486,7 +1486,7 @@ static int read_frame_internal(AVFormatContext *s, AVPacket *pkt) /* flush the parsers */ for (i = 0; i < s->nb_streams; i++) { st = s->streams[i]; - if (st->parser && st->need_parsing) + if (st->internal->parser && st->internal->need_parsing) parse_packet(s, pkt, st->index, 1); } /* all remaining packets are now in parse_queue => @@ -1507,9 +1507,9 @@ static int read_frame_internal(AVFormatContext *s, AVPacket *pkt) } /* close parser, because it depends on the codec */ - if (st->parser && st->internal->avctx->codec_id != st->codecpar->codec_id) { - av_parser_close(st->parser); - st->parser = NULL; + if (st->internal->parser && st->internal->avctx->codec_id != st->codecpar->codec_id) { + av_parser_close(st->internal->parser); + st->internal->parser = NULL; } ret = avcodec_parameters_to_context(st->internal->avctx, st->codecpar); @@ -1539,23 +1539,23 @@ static int read_frame_internal(AVFormatContext *s, AVPacket *pkt) av_ts2str(pkt->dts), pkt->size, pkt->duration, pkt->flags); - if (st->need_parsing && !st->parser && !(s->flags & AVFMT_FLAG_NOPARSE)) { - st->parser = av_parser_init(st->codecpar->codec_id); - if (!st->parser) { + if (st->internal->need_parsing && !st->internal->parser && !(s->flags & AVFMT_FLAG_NOPARSE)) { + st->internal->parser = av_parser_init(st->codecpar->codec_id); + if (!st->internal->parser) { av_log(s, AV_LOG_VERBOSE, "parser not found for codec " "%s, packets or times may be invalid.\n", avcodec_get_name(st->codecpar->codec_id)); /* no parser available: just output the raw packets */ - st->need_parsing = AVSTREAM_PARSE_NONE; - } else if (st->need_parsing == AVSTREAM_PARSE_HEADERS) - st->parser->flags |= PARSER_FLAG_COMPLETE_FRAMES; - else if (st->need_parsing == AVSTREAM_PARSE_FULL_ONCE) - st->parser->flags |= PARSER_FLAG_ONCE; - else if (st->need_parsing == AVSTREAM_PARSE_FULL_RAW) - st->parser->flags |= PARSER_FLAG_USE_CODEC_TS; + st->internal->need_parsing = AVSTREAM_PARSE_NONE; + } else if (st->internal->need_parsing == AVSTREAM_PARSE_HEADERS) + st->internal->parser->flags |= PARSER_FLAG_COMPLETE_FRAMES; + else if (st->internal->need_parsing == AVSTREAM_PARSE_FULL_ONCE) + st->internal->parser->flags |= PARSER_FLAG_ONCE; + else if (st->internal->need_parsing == AVSTREAM_PARSE_FULL_RAW) + st->internal->parser->flags |= PARSER_FLAG_USE_CODEC_TS; } - if (!st->need_parsing || !st->parser) { + if (!st->internal->need_parsing || !st->internal->parser) { /* no parsing needed: we just output the packet as is */ compute_pkt_fields(s, st, NULL, pkt, AV_NOPTS_VALUE, AV_NOPTS_VALUE); if ((s->iformat->flags & AVFMT_GENERIC_INDEX) && @@ -1819,9 +1819,9 @@ void ff_read_frame_flush(AVFormatContext *s) for (i = 0; i < s->nb_streams; i++) { st = s->streams[i]; - if (st->parser) { - av_parser_close(st->parser); - st->parser = NULL; + if (st->internal->parser) { + av_parser_close(st->internal->parser); + st->internal->parser = NULL; } st->internal->last_IP_pts = AV_NOPTS_VALUE; st->internal->last_dts_for_order_check = AV_NOPTS_VALUE; @@ -2736,9 +2736,9 @@ static void estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset) av_log(ic, AV_LOG_WARNING, "start time for stream %d is not set in estimate_timings_from_pts\n", i); - if (st->parser) { - av_parser_close(st->parser); - st->parser = NULL; + if (st->internal->parser) { + av_parser_close(st->internal->parser); + st->internal->parser = NULL; } } @@ -2774,7 +2774,7 @@ static void estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset) (st->start_time != AV_NOPTS_VALUE || st->first_dts != AV_NOPTS_VALUE)) { if (pkt->duration == 0) { - ff_compute_frame_duration(ic, &num, &den, st, st->parser, pkt); + ff_compute_frame_duration(ic, &num, &den, st, st->internal->parser, pkt); if (den && num) { pkt->duration = av_rescale_rnd(1, num * (int64_t) st->time_base.den, @@ -3589,15 +3589,15 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) /* check if the caller has overridden the codec id */ // only for the split stuff - if (!st->parser && !(ic->flags & AVFMT_FLAG_NOPARSE) && st->internal->request_probe <= 0) { - st->parser = av_parser_init(st->codecpar->codec_id); - if (st->parser) { - if (st->need_parsing == AVSTREAM_PARSE_HEADERS) { - st->parser->flags |= PARSER_FLAG_COMPLETE_FRAMES; - } else if (st->need_parsing == AVSTREAM_PARSE_FULL_RAW) { - st->parser->flags |= PARSER_FLAG_USE_CODEC_TS; + if (!st->internal->parser && !(ic->flags & AVFMT_FLAG_NOPARSE) && st->internal->request_probe <= 0) { + st->internal->parser = av_parser_init(st->codecpar->codec_id); + if (st->internal->parser) { + if (st->internal->need_parsing == AVSTREAM_PARSE_HEADERS) { + st->internal->parser->flags |= PARSER_FLAG_COMPLETE_FRAMES; + } else if (st->internal->need_parsing == AVSTREAM_PARSE_FULL_RAW) { + st->internal->parser->flags |= PARSER_FLAG_USE_CODEC_TS; } - } else if (st->need_parsing) { + } else if (st->internal->need_parsing) { av_log(ic, AV_LOG_VERBOSE, "parser not found for codec " "%s, packets or times may be invalid.\n", avcodec_get_name(st->codecpar->codec_id)); @@ -3840,7 +3840,8 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) st->internal->info->codec_info_duration = FFMIN(pkt->pts - st->start_time, st->internal->info->codec_info_duration + pkt->duration); } else st->internal->info->codec_info_duration += pkt->duration; - st->internal->info->codec_info_duration_fields += st->parser && st->need_parsing && avctx->ticks_per_frame ==2 ? st->parser->repeat_pict + 1 : 2; + st->internal->info->codec_info_duration_fields += st->internal->parser && st->internal->need_parsing && avctx->ticks_per_frame == 2 + ? st->internal->parser->repeat_pict + 1 : 2; } } if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { @@ -4256,8 +4257,8 @@ static void free_stream(AVStream **pst) av_freep(&st->side_data[i].data); av_freep(&st->side_data); - if (st->parser) - av_parser_close(st->parser); + if (st->internal->parser) + av_parser_close(st->internal->parser); if (st->attached_pic.data) av_packet_unref(&st->attached_pic); diff --git a/libavformat/wavdec.c b/libavformat/wavdec.c index 8e2a7a7475..6bce9ba688 100644 --- a/libavformat/wavdec.c +++ b/libavformat/wavdec.c @@ -183,7 +183,7 @@ static int wav_parse_fmt_tag(AVFormatContext *s, int64_t size, AVStream *st) return ret; handle_stream_probing(st); - st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); @@ -200,7 +200,7 @@ static int wav_parse_xma2_tag(AVFormatContext *s, int64_t size, AVStream *st) st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; st->codecpar->codec_id = AV_CODEC_ID_XMA2; - st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; version = avio_r8(pb); if (version != 3 && version != 4) @@ -950,7 +950,7 @@ static int w64_read_header(AVFormatContext *s) ff_metadata_conv_ctx(s, NULL, ff_riff_info_conv); handle_stream_probing(st); - st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; avio_seek(pb, data_ofs, SEEK_SET); diff --git a/libavformat/wtvdec.c b/libavformat/wtvdec.c index ab7e6b8188..a549681322 100644 --- a/libavformat/wtvdec.c +++ b/libavformat/wtvdec.c @@ -618,7 +618,7 @@ static AVStream * new_stream(AVFormatContext *s, AVStream *st, int sid, int code st->priv_data = wst; } st->codecpar->codec_type = codec_type; - st->need_parsing = AVSTREAM_PARSE_FULL; + st->internal->need_parsing = AVSTREAM_PARSE_FULL; avpriv_set_pts_info(st, 64, 1, 10000000); return st; } diff --git a/libavformat/xvag.c b/libavformat/xvag.c index 55bc25227e..2a85d66ecb 100644 --- a/libavformat/xvag.c +++ b/libavformat/xvag.c @@ -87,7 +87,7 @@ static int xvag_read_header(AVFormatContext *s) if (avio_rb16(s->pb) == 0xFFFB) { st->codecpar->codec_id = AV_CODEC_ID_MP3; st->codecpar->block_align = 0x1000; - st->need_parsing = AVSTREAM_PARSE_FULL_RAW; + st->internal->need_parsing = AVSTREAM_PARSE_FULL_RAW; } avio_skip(s->pb, -2); diff --git a/libavformat/xwma.c b/libavformat/xwma.c index 9c9b02e515..d7fd05504b 100644 --- a/libavformat/xwma.c +++ b/libavformat/xwma.c @@ -78,7 +78,7 @@ static int xwma_read_header(AVFormatContext *s) ret = ff_get_wav_header(s, pb, st->codecpar, size, 0); if (ret < 0) return ret; - st->need_parsing = AVSTREAM_PARSE_NONE; + st->internal->need_parsing = AVSTREAM_PARSE_NONE; /* XWMA encoder only allows a few channel/sample rate/bitrate combinations, * but some create identical files with fake bitrate (1ch 22050hz at From patchwork Mon May 3 13:31:59 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 27572 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a10:399:0:0:0:0 with SMTP id 25csp257514pxh; Mon, 3 May 2021 06:33:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJztSd+wMYVqVvDc7O1g2CpuI+qSuM4JJ5j4GNLbYxcwjF7zgbG26+zEIJuMHyndzpPiTKKG X-Received: by 2002:a17:907:11db:: with SMTP id va27mr16536812ejb.174.1620048781795; Mon, 03 May 2021 06:33:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620048781; cv=none; d=google.com; s=arc-20160816; b=VmnK4zVdNHPaMvWtlnxRPukvgkwHS2+udJSRqA4N69/N92aG9EFP2fC7h67ncG9CX4 dtL0VN/rGQnlt6V3albQa/RIg9KPtr1Kub7IisnBYRcxFkn8oN2yOl40C9dZFggTz2xf 22diBjS/iAREsmjHTqaocVOt4fAYuMX6geHS5F2LHtqMGTl//rtQrurYhAnJ2QFC0lRy YAB1qkoKjqZzT/VMtfCYhFc2fnI2AhNM7ZrxubAdyVWk8b4dZfqcbvx6ccQDUUyiAJF6 7GqAPCuPQBZtFq5cTqXT3JWOh3H6YzdMJAcL72XqUzBKkzaWkwXQ7kMh3zXe1a6DtR/0 rlHw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=+jmeVsHGdaeQzbYsLZ//ojzqTLUl3x2XUW/SuLPPtVw=; b=paAVsxT1aDA8lqC1u4oA/kmFECCb/myBvfBmIEmxZwWIsai3S6kI8uakbJs796nRzU dXVHjqx/D32ZpOlUaEFjSJPGKiUN9veayFTR/Ja2wnHDW6qCqhGt+JKaIb3Umh5vxr7b n7ecJMm70C0MFL1iTGmMusPt8Tsxe0A2P22DFNQ/eXi0PWQ2KkOdsAUAlgQNktMXk3we GIC7VLJVkM6xwIG3Nh0XwivH3ncHw6fXymubTIzq0A4qxpKQK+kRnPMXScEcG1d9cbW9 1xtXUmH9/Fu5SUlMwhRX2m4TUBWFyO0camNWKNcWEdYzngpRFkfz2sI1KGYHioKAtx8s vehA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b="GFKq/ezW"; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id k26si3928078edr.261.2021.05.03.06.33.01; Mon, 03 May 2021 06:33:01 -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=@gmail.com header.s=20161025 header.b="GFKq/ezW"; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C60E3687FDE; Mon, 3 May 2021 16:32:35 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f182.google.com (mail-qk1-f182.google.com [209.85.222.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AFD3A688051 for ; Mon, 3 May 2021 16:32:27 +0300 (EEST) Received: by mail-qk1-f182.google.com with SMTP id x8so4968677qkl.2 for ; Mon, 03 May 2021 06:32:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=ItG0zCb62Fl0Rf/WRFfFDaME0ZPYCX/czOQYuH/nukU=; b=GFKq/ezWyGcJkNgd5+0FxyaBnxogmau1QS56AX72ZrMAlWqdirYzs+yXNoRVpygG+Z XxXhOgLZFhT5j4WVcjItiJT6sJzIGA3YBX2Vh25YqoM07k8DUIllMkcDBv0aq8cIFlzC ound7TT4CoPSvdGaWb/kwsbQooV6fw5EAhB0zGZ6WYgA9ey4eF+rtgiwR9E8T2BXB2rz 3D9D0CZarwnaA3gR+mgoz2ZeaHqA1wH5fxbfIvq8Jvs1DABaR7HS5ARu8vqrEsm2b0dB +twnGe/bl6Fu8PpjsBFyfWSKxpcxp9FFx9KKtBCU6sexSKr1ZBWdv+D0bIk4eeCsPuUL b4pQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ItG0zCb62Fl0Rf/WRFfFDaME0ZPYCX/czOQYuH/nukU=; b=F1nyxiNhJ7CxlCXW7w0toQqWhcvrzAcunFcIufT2pDmApDIlcqZa79UZ+uWPNGN/zE NO2ukaEtDZbqu7JZQWmZdMHFlRgvRshYopeUKx9i9Dgx31/NMKUh9hpMl9D0BkdMXddQ ea4RU5FMb9i3a9OhM9Ygm4wpnZGN0Fc1c9qGaTx/Yd4ZfJRwHGAkZ+qaecc4kRLrbgID ggC7ohR3MElUtjaMFPq06CckAjSAWP1HhwfDW3mw5qiKOxevLIWuV0/m9BJPKyQ7Npo9 DfDZ/c3NBKaqMNupfUDtrGLmFFka90uVuW3Z7QrOk7g5AUdpzcnc1vA3vOzIHQUegQ2+ LbmA== X-Gm-Message-State: AOAM5329ACdeVKx6sTpJSoynoNMu1vvRJ758zOidAMeX/fEekP/MjwoJ by9KoDzOK4IolABKEaA9wv2nNnHU5Lg= X-Received: by 2002:ae9:f819:: with SMTP id x25mr19064790qkh.68.1620048745421; Mon, 03 May 2021 06:32:25 -0700 (PDT) Received: from localhost.localdomain ([191.83.208.172]) by smtp.gmail.com with ESMTPSA id 189sm5751929qkh.99.2021.05.03.06.32.24 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 06:32:24 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 3 May 2021 10:31:59 -0300 Message-Id: <20210503133200.1434-4-jamrial@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210503133200.1434-1-jamrial@gmail.com> References: <20210503133200.1434-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/5] avformat: move AVStream.codec_info_nb_frames to AVStreamInternal 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: +Jnla1CPoW0I It's a private field, no reason to have it exposed in a public header. Signed-off-by: James Almer --- libavformat/avformat.h | 5 ----- libavformat/dump.c | 2 +- libavformat/internal.h | 5 +++++ libavformat/utils.c | 30 +++++++++++++++--------------- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 9ed6d333d3..ecf76b4bfc 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1003,11 +1003,6 @@ typedef struct AVStream { int64_t first_dts; int64_t cur_dts; - /** - * Number of frames that have been demuxed during avformat_find_stream_info() - */ - int codec_info_nb_frames; - /** * Stream Identifier * This is the MPEG-TS stream identifier +1 diff --git a/libavformat/dump.c b/libavformat/dump.c index 04c93dd7d3..cf892de107 100644 --- a/libavformat/dump.c +++ b/libavformat/dump.c @@ -544,7 +544,7 @@ static void dump_stream_format(const AVFormatContext *ic, int i, av_log(NULL, AV_LOG_INFO, "[0x%x]", st->id); if (lang) av_log(NULL, AV_LOG_INFO, "(%s)", lang->value); - av_log(NULL, AV_LOG_DEBUG, ", %d, %d/%d", st->codec_info_nb_frames, + av_log(NULL, AV_LOG_DEBUG, ", %d, %d/%d", st->internal->codec_info_nb_frames, st->time_base.num, st->time_base.den); av_log(NULL, AV_LOG_INFO, ": %s", buf); diff --git a/libavformat/internal.h b/libavformat/internal.h index 928ec6edf2..94115960ea 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -377,6 +377,11 @@ struct AVStreamInternal { /* av_read_frame() support */ enum AVStreamParseType need_parsing; struct AVCodecParserContext *parser; + + /** + * Number of frames that have been demuxed during avformat_find_stream_info() + */ + int codec_info_nb_frames; }; #ifdef __GNUC__ diff --git a/libavformat/utils.c b/libavformat/utils.c index 3ccebce2b9..8fbb6bfc13 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -1793,7 +1793,7 @@ int av_find_default_stream_index(AVFormatContext *s) if (st->codecpar->sample_rate) score += 50; } - if (st->codec_info_nb_frames) + if (st->internal->codec_info_nb_frames) score += 12; if (st->discard != AVDISCARD_ALL) @@ -2677,7 +2677,7 @@ static void estimate_timings_from_bit_rate(AVFormatContext *ic) break; } bit_rate += st->codecpar->bit_rate; - } else if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && st->codec_info_nb_frames > 1) { + } else if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && st->internal->codec_info_nb_frames > 1) { // If we have a videostream with packets but without a bitrate // then consider the sum not known bit_rate = 0; @@ -2941,7 +2941,7 @@ static int has_codec_parameters(AVStream *st, const char **errmsg_ptr) if (st->internal->info->found_decoder >= 0 && avctx->pix_fmt == AV_PIX_FMT_NONE) FAIL("unspecified pixel format"); if (st->codecpar->codec_id == AV_CODEC_ID_RV30 || st->codecpar->codec_id == AV_CODEC_ID_RV40) - if (!st->sample_aspect_ratio.num && !st->codecpar->sample_aspect_ratio.num && !st->codec_info_nb_frames) + if (!st->sample_aspect_ratio.num && !st->codecpar->sample_aspect_ratio.num && !st->internal->codec_info_nb_frames) FAIL("no frame in rv30/40 and no sar"); break; case AVMEDIA_TYPE_SUBTITLE: @@ -3018,7 +3018,7 @@ static int try_decode_frame(AVFormatContext *s, AVStream *st, while ((pkt.size > 0 || (!pkt.data && got_picture)) && ret >= 0 && (!has_codec_parameters(st, NULL) || !has_decode_delay_been_guessed(st) || - (!st->codec_info_nb_frames && + (!st->internal->codec_info_nb_frames && (avctx->codec->capabilities & AV_CODEC_CAP_CHANNEL_CONF)))) { got_picture = 0; if (avctx->codec_type == AVMEDIA_TYPE_VIDEO || @@ -3696,7 +3696,7 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) break; if (st->first_dts == AV_NOPTS_VALUE && !(ic->iformat->flags & AVFMT_NOTIMESTAMPS) && - st->codec_info_nb_frames < ((st->disposition & AV_DISPOSITION_ATTACHED_PIC) ? 1 : ic->max_ts_probe) && + st->internal->codec_info_nb_frames < ((st->disposition & AV_DISPOSITION_ATTACHED_PIC) ? 1 : ic->max_ts_probe) && (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO || st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO)) break; @@ -3767,7 +3767,7 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) st->internal->avctx_inited = 1; } - if (pkt->dts != AV_NOPTS_VALUE && st->codec_info_nb_frames > 1) { + if (pkt->dts != AV_NOPTS_VALUE && st->internal->codec_info_nb_frames > 1) { /* check for non-increasing dts */ if (st->internal->info->fps_last_dts != AV_NOPTS_VALUE && st->internal->info->fps_last_dts >= pkt->dts) { @@ -3775,7 +3775,7 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) "Non-increasing DTS in stream %d: packet %d with DTS " "%"PRId64", packet %d with DTS %"PRId64"\n", st->index, st->internal->info->fps_last_dts_idx, - st->internal->info->fps_last_dts, st->codec_info_nb_frames, + st->internal->info->fps_last_dts, st->internal->codec_info_nb_frames, pkt->dts); st->internal->info->fps_first_dts = st->internal->info->fps_last_dts = AV_NOPTS_VALUE; @@ -3792,7 +3792,7 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) "DTS discontinuity in stream %d: packet %d with DTS " "%"PRId64", packet %d with DTS %"PRId64"\n", st->index, st->internal->info->fps_last_dts_idx, - st->internal->info->fps_last_dts, st->codec_info_nb_frames, + st->internal->info->fps_last_dts, st->internal->codec_info_nb_frames, pkt->dts); st->internal->info->fps_first_dts = st->internal->info->fps_last_dts = AV_NOPTS_VALUE; @@ -3801,22 +3801,22 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) /* update stored dts values */ if (st->internal->info->fps_first_dts == AV_NOPTS_VALUE) { st->internal->info->fps_first_dts = pkt->dts; - st->internal->info->fps_first_dts_idx = st->codec_info_nb_frames; + st->internal->info->fps_first_dts_idx = st->internal->codec_info_nb_frames; } st->internal->info->fps_last_dts = pkt->dts; - st->internal->info->fps_last_dts_idx = st->codec_info_nb_frames; + st->internal->info->fps_last_dts_idx = st->internal->codec_info_nb_frames; } - if (st->codec_info_nb_frames>1) { + if (st->internal->codec_info_nb_frames>1) { int64_t t = 0; int64_t limit; if (st->time_base.den > 0) t = av_rescale_q(st->internal->info->codec_info_duration, st->time_base, AV_TIME_BASE_Q); if (st->avg_frame_rate.num > 0) - t = FFMAX(t, av_rescale_q(st->codec_info_nb_frames, av_inv_q(st->avg_frame_rate), AV_TIME_BASE_Q)); + t = FFMAX(t, av_rescale_q(st->internal->codec_info_nb_frames, av_inv_q(st->avg_frame_rate), AV_TIME_BASE_Q)); if ( t == 0 - && st->codec_info_nb_frames>30 + && st->internal->codec_info_nb_frames>30 && st->internal->info->fps_first_dts != AV_NOPTS_VALUE && st->internal->info->fps_last_dts != AV_NOPTS_VALUE) { int64_t dur = av_sat_sub64(st->internal->info->fps_last_dts, st->internal->info->fps_first_dts); @@ -3872,7 +3872,7 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) if (ic->flags & AVFMT_FLAG_NOBUFFER) av_packet_unref(pkt1); - st->codec_info_nb_frames++; + st->internal->codec_info_nb_frames++; count++; } @@ -4150,7 +4150,7 @@ int av_find_best_stream(AVFormatContext *ic, enum AVMediaType type, } disposition = !(st->disposition & (AV_DISPOSITION_HEARING_IMPAIRED | AV_DISPOSITION_VISUAL_IMPAIRED)) + !! (st->disposition & AV_DISPOSITION_DEFAULT); - count = st->codec_info_nb_frames; + count = st->internal->codec_info_nb_frames; bitrate = par->bit_rate; multiframe = FFMIN(5, count); if ((best_disposition > disposition) || From patchwork Mon May 3 13:32:00 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 27571 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a10:399:0:0:0:0 with SMTP id 25csp257654pxh; Mon, 3 May 2021 06:33:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJygUTxd5Mc5f4R5PkT3jQXHrAc8Ua5rDmnYhv/C96GutvJPvi/64mLw4J1UVC7ORV6qEEfW X-Received: by 2002:a50:fe05:: with SMTP id f5mr3999950edt.288.1620048791637; Mon, 03 May 2021 06:33:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620048791; cv=none; d=google.com; s=arc-20160816; b=RXyXSmiti6SeiWPl7/Qko72zy/K40a0oB/F3Us2JvluY0uRjfM6APrtujMLxtlVz1m S8yT2+oqN3zGoPjJx5PKzrfKYev11QcFdG1ztWM1MX4J1sWRN+C/sq5O3LjvphR0DaWx Kl75XKn0tWUxBSaZW6x/2sdOvWrDKoZ0hKBc+0GkCHxcU98IgfDfn5Gf/P7ywawEwayu vmYtTqJFI/AxbNF8b2qp41XCm5VrDKUGixEj2FvDmaEbrct0QTePRfxlyh15Ha8MIkZi tmsZAHGh4zUB8dIY8G6yed/v8NMw1EEN9TUm/XCW9vKoZI7FlnztvDCqpRP38RQpNiMF 4XRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=feFSSy5r+4JArE8CXj0Joc4lULNvKwPuYawobH8HG5c=; b=dCL1q4aEbTLtGXj64DO59oBDya4F4qIIIa5k4bcaTiSuHDKCuQBLoyRYqft+YZ2aX5 QpnfieeJOVLob+3uYRym7M1YBxqTvN0fPinI5ZkxQfTBFAzoSbZ45cQo50Ij1N11QoU0 HoExm1OoDyUwpfEW/00Od6r8PO+YLjvwSKOdg2DMWAMIkNIDt9Tc38WH70d5MzzpOFJo Z0T6cAOGavKnZurPxSzUK5mMiZuV7DqjRX5zq9U62bn7vXknaUhhLUK/IeAl6gWPX4yQ JdjO2QOLcA3P20VRwqfrHDZeGjDKQ+Tw+tbN7WUym0M7zm1PyC5dlzDakzMbHeHf4luj c1WA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b="eb/2FVgs"; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id j17si9914495edy.46.2021.05.03.06.33.11; Mon, 03 May 2021 06:33:11 -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=@gmail.com header.s=20161025 header.b="eb/2FVgs"; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D320368825A; Mon, 3 May 2021 16:32:36 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f43.google.com (mail-qv1-f43.google.com [209.85.219.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2DC65688081 for ; Mon, 3 May 2021 16:32:28 +0300 (EEST) Received: by mail-qv1-f43.google.com with SMTP id jm10so2521569qvb.5 for ; Mon, 03 May 2021 06:32:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=cuczxEbbAArQ8RIDvCXjF9ziZwHjPoIjTv7aiteavH0=; b=eb/2FVgsWbTZg8vQgHVeR27ZVMPGcBkxnyo2w9DAfdOynln/ViS8IyK/Rcb+Cq06li n3YTW3e/ryIswgT7jV9edITCCNU9uLm0HBdPWU1OisCeAapgQ4lYR9knWTkrBw2SsJ6X k3WiFhezOgwVlUOPxisip7tCOiJJBeq99rrp2RPrM6YD2my+MY4GZD4X6wlQBWo/2fZQ +6RlXvxXw3saGGUCY84wtFWVUGOiVPypP1H9rk3KqT/ZzsNcZr3NecT/QFbTowhqINCd or/IbrY/ET9zCZkdQaYbgseL6YikHBs3M2iFiIRkWXYFqDwcLvIdoM/LAttyFeHIUzDH kBnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cuczxEbbAArQ8RIDvCXjF9ziZwHjPoIjTv7aiteavH0=; b=j11snyB1FdIj2OoXW9paGYx+74SPhXyWwosHWrkDRvGGi7mHfhxiIftMXZE2Zjev21 f8+674wl4owFliVp26q1MpxTEl7j126sSJ590sb/qCKHrjcewEz9/Gf8Zyz4nr+Chtpi Sa404NVDlj+ibP1XfpuEyzE94zzsdk75YvATf+iVId/NhsyDxK0TM3OMKPpu4jk+3wky A8R5ZZIGrIYQRcOFFks76ccHrOe3yzwEtiBZuBAAOumUuxd//sPTLXyHW9bIss/GWOne LeuX3CfbJrpBgdv9pJ72v+aDVD0MbSXPFPcidpvjmf0SoUEumficYFJ05AXPWrYYMDbX sjyg== X-Gm-Message-State: AOAM532TdB8gkY5ezdQT24ae9uhMqWY63N+SNh+e8WuuFcRmgAnUOoee zw8iVzF3KqcLE8ApebOrcB8wj33YFXI= X-Received: by 2002:a0c:c590:: with SMTP id a16mr19315782qvj.30.1620048746699; Mon, 03 May 2021 06:32:26 -0700 (PDT) Received: from localhost.localdomain ([191.83.208.172]) by smtp.gmail.com with ESMTPSA id 189sm5751929qkh.99.2021.05.03.06.32.25 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 06:32:26 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 3 May 2021 10:32:00 -0300 Message-Id: <20210503133200.1434-5-jamrial@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210503133200.1434-1-jamrial@gmail.com> References: <20210503133200.1434-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/5] avformat: move AVStream.stream_identifier to AVStreamInternal 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: HvtnHBk8Y+Kw It's a private field, no reason to have it exposed in a public header. Signed-off-by: James Almer --- libavformat/avformat.h | 7 ------- libavformat/internal.h | 7 +++++++ libavformat/mpegts.c | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/libavformat/avformat.h b/libavformat/avformat.h index ecf76b4bfc..d62c3f8744 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1003,13 +1003,6 @@ typedef struct AVStream { int64_t first_dts; int64_t cur_dts; - /** - * Stream Identifier - * This is the MPEG-TS stream identifier +1 - * 0 means unknown - */ - int stream_identifier; - /** * An opaque field for libavformat internal usage. * Must not be accessed in any way by callers. diff --git a/libavformat/internal.h b/libavformat/internal.h index 94115960ea..d9423635d2 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -382,6 +382,13 @@ struct AVStreamInternal { * Number of frames that have been demuxed during avformat_find_stream_info() */ int codec_info_nb_frames; + + /** + * Stream Identifier + * This is the MPEG-TS stream identifier +1 + * 0 means unknown + */ + int stream_identifier; }; #ifdef __GNUC__ diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index fb454b9fd3..a02965bacf 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -1995,7 +1995,7 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type } break; case 0x52: /* stream identifier descriptor */ - st->stream_identifier = 1 + get8(pp, desc_end); + st->internal->stream_identifier = 1 + get8(pp, desc_end); break; case METADATA_DESCRIPTOR: if (get16(pp, desc_end) == 0xFFFF) @@ -2114,7 +2114,7 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type // Listing of data_component_ids is in STD-B10, part 2, Annex J. // Component tag limits are documented in TR-B14, fascicle 2, // Vol. 3, Section 2, 4.2.8.1 - int actual_component_tag = st->stream_identifier - 1; + int actual_component_tag = st->internal->stream_identifier - 1; int picked_profile = FF_PROFILE_UNKNOWN; int data_component_id = get16(pp, desc_end); if (data_component_id < 0)