From patchwork Fri Sep 28 18:51:10 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: alx.sukhanov@gmail.com X-Patchwork-Id: 10521 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:ab0:73d2:0:0:0:0:0 with SMTP id m18csp825407uaq; Sun, 30 Sep 2018 10:56:42 -0700 (PDT) X-Google-Smtp-Source: ACcGV62dyCPrKirQpy5eY96YKmrePiM0sdA5IQgtrMvBKnWtnzz93ZreAPcclg+ES188U0dMH8mj X-Received: by 2002:a1c:c011:: with SMTP id q17-v6mr6990331wmf.37.1538330202309; Sun, 30 Sep 2018 10:56:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538330202; cv=none; d=google.com; s=arc-20160816; b=FrydhUstM6RpCi84nkC564Qp9S+/zVwJcsbiKkzcviYfmII7I4TpmwFzsqvwny6FaX RYwJkILd655dHHR16dtDt/Hssdgi3yqARdOtRwRjeOt1Midc8OEfToJMvL4sr+2sroo5 1VoZ4dXLFC1fKt5beMawIJxwHZhsEO+wJ9Qs4wtgrsyOdWKhsWDV18ufnsgmlfefVgI0 22py7iXr9aZgT4H9QqoMbRozUFMxTArLfdBriBwCVWQpjZdBGqV9DP2wkQIACQTpBVk2 4d00zHstfiJ9KLoMZ8hnNjr/YPQ20cMyX3Ip1n2LTubs4VuufhHqxvPJC5SBpsvgYyAp AKIg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc: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=kRAaGU44jkmJH+rqXosmqSnGQQt/DZ7wIcP7v6Y5omA=; b=Ct1u7YxcY7ddGt+e8WO8mCvHV/A2rEQTTaITEwKi7wcmqUQBE9UUbYwmTYQo3OpEMs MrN25VOFDSc3J31kt8ci0G8vLlgvwLo3BtQkTE/ayWFr0WIb2dqrxLge1hmCzLdU/6+7 w+1pJk4ZXCrYIncyQ+nXwDG3sXKXV58y/qr5tMshsUSH9B394T2VFAHtd2uukekkQXPf OEmoehcpalA16zWNEcaI7ubgxCzydpeLXe8lS8TYfhN85fITAFJ2Su3Q+dSWdxZ2c/OV YQl5PMV+4q6GcxfLyM3c0MNdPx4aWdipQ+KqW7TDo1n33awM4GipMY8zqd7nW0gsdZ4s m8kQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=nxSy7osL; 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 75-v6si1190458wmt.133.2018.09.30.10.56.41; Sun, 30 Sep 2018 10:56: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=nxSy7osL; 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 9C389689EB1; Sun, 30 Sep 2018 20:56:21 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f195.google.com (mail-pf1-f195.google.com [209.85.210.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3B0FB689946 for ; Fri, 28 Sep 2018 21:52:14 +0300 (EEST) Received: by mail-pf1-f195.google.com with SMTP id k19-v6so4921089pfi.1 for ; Fri, 28 Sep 2018 11:52:31 -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:mime-version :content-transfer-encoding; bh=/kUBpex57DgIr06gXYN4aaBtQpdtW5iM0Hlm3u0hHgI=; b=nxSy7osLoyFj8L0dlMZWrKe3WoeAbUmHZtKsGWcNlfEUWt04frOqRis0ycpwc81I1J 6mivgq02C0ARVbgYkXfChG3l18qsxUMwiTmOqDKZ61/KNu0cpcmhI3k53PhNbV6og41W Brc73NbfxboPyPhO2sNfXTB0XwhwjxHce52YI4zRty9yUE39Wq+4hnU4ev+ZD72mcPAQ 0A/k4GQaf2CS9m6WUiDF5ML/u+jF2n8tsSrSzOKYvCfMwyFiQFTcmYEbJozD+08/vUDT XY4fk17e8i6P4nzbaSFawMTHSmy0T+PS8zyzuBIMwrk/DYWPIo50TGCVNztm2y2e6cJS li6w== 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:mime-version :content-transfer-encoding; bh=/kUBpex57DgIr06gXYN4aaBtQpdtW5iM0Hlm3u0hHgI=; b=noXMWtH82lHsTGCrwDgo9lFNnmTX7nOM0ShhjZj0Wj4fVG/HZ0TbfEsC51VJzMovhD NTc/lfnr6Xw+UKm7LpPHYgyFSmJDNaiIR0dEYIF+kbpw3fZZDA+dtGwMH9eGNqaufVi0 WB3jZ9svaN45pPoa0hSx4ulPQjYlTt1gj/z6t1EQKnMAjFR7mabLPSEyVaO+M2MdZ5go 18nktDNd51cNG2mCYzTL0mAyeesajw9muw+S5ie99+f+R5/6gsGir07y3cqgciaqmg+M jT5CdVTAP2n2KPk9XYM2krj3oYlcHtRpXzGzfViDUkZ54fhtNQol8bUoYn2ZIcbMBKUa EA5w== X-Gm-Message-State: ABuFfohTBHT5tij9N3K0yhdznE5AP/xWI/m1unRLypROXuosBUP1DcqI OWC6EYHxO6jb5Ieo7FkfKhL45f6+ X-Received: by 2002:a63:991a:: with SMTP id d26-v6mr16404020pge.159.1538160749497; Fri, 28 Sep 2018 11:52:29 -0700 (PDT) Received: from asukhanov3.mtv.corp.google.com ([2620:0:1000:2100:c9c9:3b4c:c6b7:7c22]) by smtp.gmail.com with ESMTPSA id c69-v6sm865735pfg.2.2018.09.28.11.52.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 28 Sep 2018 11:52:28 -0700 (PDT) From: alx.sukhanov@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Fri, 28 Sep 2018 11:51:10 -0700 Message-Id: <20180928185110.212678-1-alx.sukhanov@gmail.com> X-Mailer: git-send-email 2.19.0.605.g01d371f741-goog MIME-Version: 1.0 X-Mailman-Approved-At: Sun, 30 Sep 2018 20:56:20 +0300 Subject: [FFmpeg-devel] [PATCH] avformat: add H264 and HEVC support in IVF muxer 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 Sukhanov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Alex Sukhanov --- libavformat/ivfenc.c | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/libavformat/ivfenc.c b/libavformat/ivfenc.c index 66441a2a43..68c36daf09 100644 --- a/libavformat/ivfenc.c +++ b/libavformat/ivfenc.c @@ -38,17 +38,35 @@ static int ivf_write_header(AVFormatContext *s) par = s->streams[0]->codecpar; if (par->codec_type != AVMEDIA_TYPE_VIDEO || !(par->codec_id == AV_CODEC_ID_AV1 || + par->codec_id == AV_CODEC_ID_H264 || + par->codec_id == AV_CODEC_ID_HEVC || par->codec_id == AV_CODEC_ID_VP8 || par->codec_id == AV_CODEC_ID_VP9)) { - av_log(s, AV_LOG_ERROR, "Currently only VP8, VP9 and AV1 are supported!\n"); + av_log(s, AV_LOG_ERROR, "Currently only AV1, H264, HEVC, VP8 and VP9 and AV1 are supported!\n"); return AVERROR(EINVAL); } avio_write(pb, "DKIF", 4); avio_wl16(pb, 0); // version avio_wl16(pb, 32); // header length - avio_wl32(pb, - par->codec_id == AV_CODEC_ID_VP9 ? AV_RL32("VP90") : - par->codec_id == AV_CODEC_ID_VP8 ? AV_RL32("VP80") : AV_RL32("AV01")); + switch (par->codec_id) { + case AV_CODEC_ID_AV1: + avio_wl32(pb, AV_RL32("AV01")); + break; + case AV_CODEC_ID_H264: + avio_wl32(pb, AV_RL32("H264")); + break; + case AV_CODEC_ID_HEVC: + avio_wl32(pb, AV_RL32("HEVC")); + break; + case AV_CODEC_ID_VP8: + avio_wl32(pb, AV_RL32("VP80")); + break; + case AV_CODEC_ID_VP9: + avio_wl32(pb, AV_RL32("VP90")); + break; + default: + break; + } avio_wl16(pb, par->width); avio_wl16(pb, par->height); avio_wl32(pb, s->streams[0]->time_base.den); @@ -95,8 +113,21 @@ static int ivf_check_bitstream(struct AVFormatContext *s, const AVPacket *pkt) int ret = 1; AVStream *st = s->streams[pkt->stream_index]; - if (st->codecpar->codec_id == AV_CODEC_ID_VP9) + if (st->codecpar->codec_id == AV_CODEC_ID_H264) { + if (pkt->size >= 5 && AV_RB32(pkt->data) != 0x0000001 && + (AV_RB24(pkt->data) != 0x000001 || + (st->codecpar->extradata_size > 0 && + st->codecpar->extradata[0] == 1))) + ret = ff_stream_add_bitstream_filter(st, "h264_mp4toannexb", NULL); + } else if (st->codecpar->codec_id == AV_CODEC_ID_HEVC) { + if (pkt->size >= 5 && AV_RB32(pkt->data) != 0x0000001 && + (AV_RB24(pkt->data) != 0x000001 || + (st->codecpar->extradata_size > 0 && + st->codecpar->extradata[0] == 1))) + ret = ff_stream_add_bitstream_filter(st, "hevc_mp4toannexb", NULL); + } else if (st->codecpar->codec_id == AV_CODEC_ID_VP9) { ret = ff_stream_add_bitstream_filter(st, "vp9_superframe", NULL); + } return ret; }