From patchwork Sat Nov 30 04:21:11 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andriy Gelman X-Patchwork-Id: 16497 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id B93F14472B6 for ; Sat, 30 Nov 2019 07:17:53 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 91E8968B481; Sat, 30 Nov 2019 07:17:53 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f193.google.com (mail-qk1-f193.google.com [209.85.222.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 800B268B366 for ; Sat, 30 Nov 2019 07:17:47 +0200 (EET) Received: by mail-qk1-f193.google.com with SMTP id f5so9073970qkm.13 for ; Fri, 29 Nov 2019 21:17:47 -0800 (PST) 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=OilfZMyNAuunqD//OUNae6ErX2JYes8lTB6GwEzNMiU=; b=OAk1aJzy6mj5oYQdAilLhLsOqe6bcCso7xpoT8EJtgVWacItnHON+gPvhPoFccTaMZ E5zhvQCeYk4BA9R5wXg/rkRQsyISZjHUA+5zUgpE/nUtuzdg1gb/+vOoh09CEllVSQRd Oy24nO7LMomV4Y0iM1+0MOzM6qrbjrrA3d3dLQy+i/yyfGt5xKhth2tXHoYvkM6l1b3k BsFY0oTLSJcvKxmjF0v9tE3MQ2qzfszSpO4A79vOpJLtGEesgR6PK4b47oaXgJltxCjc EleEv4hp/3/g8iib5DwXkLPQyNYRocrkeocNulx8ZAMpwFeLrxD1ejZS/qhYLdhrYZ0U B9mw== 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=OilfZMyNAuunqD//OUNae6ErX2JYes8lTB6GwEzNMiU=; b=jfAyTuJzxm5bDWKqa2hnJHDGUciA+bBKV4glK7EcOT9nCCN8lu+pm+BPgoaDIY9yrY hA+SyjQr4vkYbPlnAeYS0hyYl0C0+BLtGqexX0+h4lByD5WQCFg2oHuDxeB7zGvPChjo BUKDi38SdmXJ0zKCYihzLnDAZ2S1lQf5kYZq3j9GwE9uO29BNrC6Vx8KTOxkmjz0lAXA u94AJE9woHH1AbLoAXhppGCI9Et/9kQRwSymJcW1uiS7ujpRU3lvOSUfZVX8RtznIZvA oQk4xs6qv/ilvS8O/378r9/Byr99Egu4Lx2g3AhSs0xHxU6u1IDWUmFIJLodnB6/b+Yi h4tA== X-Gm-Message-State: APjAAAX2JqmKtQ/tAn7N1+6EjRuz1rZ88d6fFKQMkV7NM1LwLIchnZ5n yNpVptAP2cK0Eibv//oQi73d/iu6 X-Google-Smtp-Source: APXvYqyJeL3GUIXnvWD/wsp+AlUZb+JG7dBlEMNJPfip/wKkL8h1/0VfCHBWhBYP9JuXovLM317gPw== X-Received: by 2002:a37:83c7:: with SMTP id f190mr20422404qkd.313.1575087713417; Fri, 29 Nov 2019 20:21:53 -0800 (PST) Received: from localhost.localdomain (c-71-232-27-28.hsd1.ma.comcast.net. [71.232.27.28]) by smtp.gmail.com with ESMTPSA id v189sm11267497qkc.37.2019.11.29.20.21.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 Nov 2019 20:21:52 -0800 (PST) From: Andriy Gelman X-Google-Original-From: Andriy Gelman To: ffmpeg-devel@ffmpeg.org Date: Fri, 29 Nov 2019 23:21:11 -0500 Message-Id: <20191130042111.21276-1-andriy.gelman@gmail.com> X-Mailer: git-send-email 2.24.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] lavc/extract_extradata: Use bytestream api 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: Andriy Gelman Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Andriy Gelman Signed-off-by: Andriy Gelman --- libavcodec/extract_extradata_bsf.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/libavcodec/extract_extradata_bsf.c b/libavcodec/extract_extradata_bsf.c index ff111de48cb..4a9f6608734 100644 --- a/libavcodec/extract_extradata_bsf.c +++ b/libavcodec/extract_extradata_bsf.c @@ -27,6 +27,7 @@ #include "av1.h" #include "av1_parse.h" #include "bsf.h" +#include "bytestream.h" #include "h2645_parse.h" #include "h264.h" #include "hevc.h" @@ -87,6 +88,7 @@ static int extract_extradata_av1(AVBSFContext *ctx, AVPacket *pkt, if (extradata_size && has_seq) { AVBufferRef *filtered_buf; uint8_t *extradata, *filtered_data; + PutByteContext pb_filtered_data, pb_extradata; if (s->remove) { filtered_buf = av_buffer_alloc(filtered_size + AV_INPUT_BUFFER_PADDING_SIZE); @@ -108,15 +110,17 @@ static int extract_extradata_av1(AVBSFContext *ctx, AVPacket *pkt, *data = extradata; *size = extradata_size; + bytestream2_init_writer(&pb_extradata, extradata, extradata_size); + if (s->remove) + bytestream2_init_writer(&pb_filtered_data, filtered_data, filtered_size); + for (i = 0; i < s->av1_pkt.nb_obus; i++) { AV1OBU *obu = &s->av1_pkt.obus[i]; if (val_in_array(extradata_obu_types, nb_extradata_obu_types, obu->type)) { - memcpy(extradata, obu->raw_data, obu->raw_size); - extradata += obu->raw_size; + bytestream2_put_buffer(&pb_extradata, obu->raw_data, obu->raw_size); } else if (s->remove) { - memcpy(filtered_data, obu->raw_data, obu->raw_size); - filtered_data += obu->raw_size; + bytestream2_put_buffer(&pb_filtered_data, obu->raw_data, obu->raw_size); } } @@ -181,6 +185,7 @@ static int extract_extradata_h2645(AVBSFContext *ctx, AVPacket *pkt, (ctx->par_in->codec_id == AV_CODEC_ID_H264 && has_sps))) { AVBufferRef *filtered_buf; uint8_t *extradata, *filtered_data; + PutByteContext pb_filtered_data, pb_extradata; if (s->remove) { filtered_buf = av_buffer_alloc(filtered_size + AV_INPUT_BUFFER_PADDING_SIZE); @@ -202,17 +207,19 @@ static int extract_extradata_h2645(AVBSFContext *ctx, AVPacket *pkt, *data = extradata; *size = extradata_size; + bytestream2_init_writer(&pb_extradata, extradata, extradata_size); + if (s->remove) + bytestream2_init_writer(&pb_filtered_data, filtered_data, filtered_size); + for (i = 0; i < s->h2645_pkt.nb_nals; i++) { H2645NAL *nal = &s->h2645_pkt.nals[i]; if (val_in_array(extradata_nal_types, nb_extradata_nal_types, nal->type)) { - AV_WB24(extradata, 1); // startcode - memcpy(extradata + 3, nal->raw_data, nal->raw_size); - extradata += 3 + nal->raw_size; + bytestream2_put_be24(&pb_extradata, 1); //startcode + bytestream2_put_buffer(&pb_extradata, nal->raw_data, nal->raw_size); } else if (s->remove) { - AV_WB24(filtered_data, 1); // startcode - memcpy(filtered_data + 3, nal->raw_data, nal->raw_size); - filtered_data += 3 + nal->raw_size; + bytestream2_put_be24(&pb_filtered_data, 1); // startcode + bytestream2_put_buffer(&pb_filtered_data, nal->raw_data, nal->raw_size); } }