From patchwork Fri May 11 01:40:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alex Converse X-Patchwork-Id: 8915 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:155:0:0:0:0:0 with SMTP id c82-v6csp126677jad; Thu, 10 May 2018 18:40:51 -0700 (PDT) X-Google-Smtp-Source: AB8JxZrhG4dBFpC1cZZNzjcnFVP3sPHSnVuL2z/4iwx9QWPaxpTNmK8gzoiit4tZZ7q3XvLMYRyK X-Received: by 2002:a1c:83cc:: with SMTP id f195-v6mr673203wmd.27.1526002851869; Thu, 10 May 2018 18:40:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526002851; cv=none; d=google.com; s=arc-20160816; b=QBX1i0z+57VQTxrCIwUGS64I21/ot3s6tcL1WXAxFSmBb/P3HcuXA/9xkCalSn0+J6 bp4k/cvNLeUFRwJQ4gbew5Y4UI9KD0V7ARuzGQFRRcgeUipHDBLf6DtsyhjpYYMWriJL 7FNAAWy/DJunRy+9crqt5qJmwr7DkgaqFfQ6Yvl67PRB9RCGCyAayro0IXxCjUpAm6sE 1lY9wD5hUhKMS7h8cWS8wRnOfMs0C6BHXNp/bPX107DlP8ZVwS6TW9/7b8I/DRuJiLqq hxkscazG3+gE3TOZ2aHLgZfUgTfc1Z4Li/5gGQZbNH29S85nCKQ9LN+4vm0J+6m97AX5 5XzQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=RUGQ6/f1FFhk7Do9l+frjAev9xj8ZrvNxDMxMSso3nE=; b=rJcRkHRA5hi6zLAncNcLvr+g10djwDm3bMcCFqf5xkaEqNr2VNefbn4BeqFIddKfEc u8qWjOZ3WfZU8Txe04aaOAfBPi0tqEwKVKYEEVV9D3BenlUR/fUPlJBBsR7D8DMCWTXY YArvyhPg/QZUsF+/5UgpQWMHbz6rWgcHNaO98ASIM/bbxTO0L5Kav4xRNra6BrnvDlKM CSIRuFHHzfBeYpdzqtlpc0G2zGyr1asD+Mdd2i6Jw6QvxYYii3+j1X9pL+xjvF9wRVeR i06IJTR8IyS0t32hS3UI8RYo6w2xrAhx45fPQE+zG7XmCLkNfqjiz5UR+mEmLyVjR7j2 rgTg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=rw5IUTyI; 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 b14-v6si1949617wrh.148.2018.05.10.18.40.50; Thu, 10 May 2018 18:40:51 -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=rw5IUTyI; 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 E37DD68A91C; Fri, 11 May 2018 04:40:12 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf0-f195.google.com (mail-pf0-f195.google.com [209.85.192.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 46CEB68A1BA for ; Fri, 11 May 2018 04:40:06 +0300 (EEST) Received: by mail-pf0-f195.google.com with SMTP id o76-v6so1924996pfi.5 for ; Thu, 10 May 2018 18:40:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Sll+7hVhVakb4PXLItdUT4BA5cB0+k3essYjTvG5WwU=; b=rw5IUTyIi8M06xBYvdCTI7bdNHzGLoxU6xbUJBkHtmmH0UzwcM0f3Fu1RY/j566PUk hQ2z/5FL7I1i81sUuqMNzZyu3JzAD4pTOulMzCtUeyfWNuhvFHLe6aq+xTGrkBUAy1Y7 OzPiYzxjbHh3qt69ddbW3LnLz7g0/wej7Ysk/1cE21b0/pqdrL6GPBN7MTAgrlptlLgp ucAK1BLH+8hTsO5d72EYq4PDr0YGt6rLA0SIjjSWays2Sx/Y3DrTrutDLlzJuZKfUBBd 9zJ6WizQE7UedgV5nIoj+6fMz/HWShQznodYMxA2nL30Spi6/pFh1Pd1ESjnwXrcmpOI KHBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Sll+7hVhVakb4PXLItdUT4BA5cB0+k3essYjTvG5WwU=; b=gtAC79TV/9VbvOu4WZJmsVaVSyoVTYg7MysB5A5p232+hqc2U8slnRJK92y2h6p+ye PnzBuHIBBTvHQOw7FkmbxZK04zkhHTkctnEUZ7w/8Tii3zDlSDjfZFq1uNKrGaeQjjz8 JxdzvSTpvWnfYcXc1LmUA03QxV8GkJDGbm5p+VCiHOyBpHpuDp5hS2z/fNzE1tatIsw6 T2UvMm1I8HM0zSTkwd5hz1g4X+xCteTGbRlF4TXBQdW5zIInzP6M72lH6/Bi+hnOiuHr eMN423aMzuMm4TLnAEkxTw+Jqc1mXOm16mqvV7vqf/yWYXi0wGUFdFX4EGNm8iHa3SQi TT+g== X-Gm-Message-State: ALKqPwfRh65J6vl3hPKcPqIRr0PyWI1k4VxJJM/pXNW1EbKiNc3no2t+ bD8EhAukuiSgqQ9IizIJn2RT6M4u X-Received: by 2002:a62:c205:: with SMTP id l5-v6mr3488768pfg.6.1526002840361; Thu, 10 May 2018 18:40:40 -0700 (PDT) Received: from localhost.localdomain ([136.25.129.14]) by smtp.gmail.com with ESMTPSA id v5-v6sm3149474pff.130.2018.05.10.18.40.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 10 May 2018 18:40:39 -0700 (PDT) From: Alex Converse To: ffmpeg-devel@ffmpeg.org Date: Thu, 10 May 2018 18:40:07 -0700 Message-Id: <20180511014008.1676-1-alex.converse@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180503165021.2120-1-alex.converse@gmail.com> References: <20180503165021.2120-1-alex.converse@gmail.com> Subject: [FFmpeg-devel] [PATCH 1/2] flvenc: Factorize timestamp writing X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Alex Converse MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Alex Converse The code is trivial but the semantics in the spec are ambiguous. This should help keep parts of the muxer interpreting them consistently. --- libavformat/flvenc.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c index e8af48cb64..9b7cdfe7db 100644 --- a/libavformat/flvenc.c +++ b/libavformat/flvenc.c @@ -230,12 +230,17 @@ static void put_amf_string(AVIOContext *pb, const char *str) avio_write(pb, str, len); } +// FLV timestamps are 32 bits signed, RTMP timestamps should be 32-bit unsigned +static void put_timestamp(AVIOContext *pb, unsigned ts) { + avio_wb24(pb, ts & 0xFFFFFF); + avio_w8(pb, (ts >> 24) & 0x7F); +} + static void put_avc_eos_tag(AVIOContext *pb, unsigned ts) { avio_w8(pb, FLV_TAG_TYPE_VIDEO); avio_wb24(pb, 5); /* Tag Data Size */ - avio_wb24(pb, ts); /* lower 24 bits of timestamp in ms */ - avio_w8(pb, (ts >> 24) & 0x7F); /* MSB of ts in ms */ + put_timestamp(pb, ts); avio_wb24(pb, 0); /* StreamId = 0 */ avio_w8(pb, 23); /* ub[4] FrameType = 1, ub[4] CodecId = 7 */ avio_w8(pb, 2); /* AVC end of sequence */ @@ -978,8 +983,7 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) } avio_wb24(pb, size + flags_size); - avio_wb24(pb, ts & 0xFFFFFF); - avio_w8(pb, (ts >> 24) & 0x7F); // timestamps are 32 bits _signed_ + put_timestamp(pb, ts); avio_wb24(pb, flv->reserved); if (par->codec_type == AVMEDIA_TYPE_DATA ||