From patchwork Tue Oct 24 03:03:35 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 5665 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.90 with SMTP id m26csp145107jah; Mon, 23 Oct 2017 20:04:06 -0700 (PDT) X-Received: by 10.223.195.131 with SMTP id p3mr13962295wrf.89.1508814246889; Mon, 23 Oct 2017 20:04:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1508814246; cv=none; d=google.com; s=arc-20160816; b=cz2w/j331Us3ydIgmJiqlyJnpZmIt/b3yebfj4MmKSv0JwcjZmo3Xfre8EO7sh6oQT ui+JVGyytgqCbBmRdtZ9KbwLVYX5FwvEJb2+m5jeyPBokHU/zzg/pjBuKa7b52Wo6vpS 50UCeQfv28+c+siRFJ5UcriP75KkalAURl7VyEmI6BBkeI484T+BuR+akPaJekkEdpCJ u+jMaBZs+DiyJ4pX/je5DdL5V7hPtZLzwpfZyy8aesgb1NDFok8tBTQRO9pLKwiRbgGM 4WtsntbgvGBOHs28FPCAATe+HupI7b+PVByp0GOqEqaZCuHAfS28qa+IqjnhIQBh791a PgfQ== 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:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=O/h1EohYNxYYsFqy4dZkfTBwMbVlI1QmiDlTVnlKuJU=; b=B9dzPMg2ZKOSal8/JZgvA9buRrTBZKe25THnBlxsX1nJnzTMkFk/JV9vdn5piLprpB w5//MaZW0oEN2CNW/1bqeqz3OEztjdL5f3YdfH/h1SbTrgbuzDkcdMmCZU2jcTV3NZGP oYt1ASZlEbZsteyJkR0rSR/s/Hj7/12objDiSa238NytBfxL/UvTctBusvNy0frgwwh6 0pI8FwgVoVVbI7R0gDWH9Agb66I6dAVO7AVRaTQ4KmeVkbeQtVXfRjWaN6BWvGwXjUrY cOu58OkrYONjsB4iImnvOC51O/Bxg1NsN5+sr4hAoDJro1yEEJCX+LyUz+4jyvVN3lQs 0I6w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=DHfEhkMA; 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=NONE 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 f17si6324629wrc.29.2017.10.23.20.04.05; Mon, 23 Oct 2017 20:04:06 -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=DHfEhkMA; 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=NONE 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 6127668A1AF; Tue, 24 Oct 2017 06:03:57 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk0-f196.google.com (mail-qk0-f196.google.com [209.85.220.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 93992689F3F for ; Tue, 24 Oct 2017 06:03:51 +0300 (EEST) Received: by mail-qk0-f196.google.com with SMTP id f199so24589282qke.2 for ; Mon, 23 Oct 2017 20:03:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=OuoUQxDyeMqsrBTeBxFaiwmvzDcEpE43VQN3ne/q+4Q=; b=DHfEhkMAMS6P+mODbADvgdciLdm2kWgDHq7eY/9iXV0bnMMEw5320XcJ46tieZLEJF d2cD8ND5sEYF3YKXjxjynnw+T/zDYgxOtkO3oqwsoh135s3f7Txs271KS0aCpxseEVJn uSW9OSwMHV5hcao0DKvGAzKaj+qmqTZ6op1j1FW/6rLANRU2yL3XS3vNmSanR4c/IPP0 C5hf1BNnqHQQv6YSkY5DvSMgvK+QsTNLhqFKt/VPEz5vMLDAdjhrXOT63Uj1RtVih0AE g5alyUjzm565KslK4mPbfd+3qaB8tgd+gbv4Pdcz4NOsRdXS9Xawr/JgUa1u07jnm5Mc 6saA== 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; bh=OuoUQxDyeMqsrBTeBxFaiwmvzDcEpE43VQN3ne/q+4Q=; b=fyDZEgDN33/0pp9XbpsaS97OGG7KssyaXM3plog8+eeR0FO8weSkdBsn6LjhvSifK1 RJ4GC6rMq+fUf+t/fm2bqMV/hYsO8soKUX+zRudu5aXsRZoYGjQbdmy0+NA3lLT/S8nG oprf1qAigqrRjGvsbHX1xqPAi8tbiNJALGH/kbcIesHHOPyEWCwUgTxN2q5IfxYgjs6G TNvGWKrepSHmQ1atKZxsLOPYAZ5Ks8SfRH8gPDSp071ms203xDQYZAahb+A5hoBMplkG +g8MujWZahq23zwbdEn/mq7bBjuBzvbrKq0c/KwyQlz2XKitBrqrHz0/SiqR5qqeI6XH FN9g== X-Gm-Message-State: AMCzsaVuk8ioNLCAtVpqqtdXxzj15pYCX98Zq/m9xKTity+hubmlg/b/ fS18WYJ5VCw/kIBmzcloVy1MTg== X-Google-Smtp-Source: ABhQp+Q4BEZ59bTqMJ5obB0sFlMCLG0IzbYE4bLBu7JUPFOoo42NmA5HGVPc26vuIPWcdqIHKQtwJg== X-Received: by 10.55.111.193 with SMTP id k184mr22774908qkc.244.1508814237502; Mon, 23 Oct 2017 20:03:57 -0700 (PDT) Received: from localhost.localdomain ([181.231.59.220]) by smtp.gmail.com with ESMTPSA id i13sm5534627qke.39.2017.10.23.20.03.56 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 23 Oct 2017 20:03:56 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 24 Oct 2017 00:03:35 -0300 Message-Id: <20171024030335.3156-1-jamrial@gmail.com> X-Mailer: git-send-email 2.14.2 Subject: [FFmpeg-devel] [PATCH] avcodec/exif: remove GetByteContext usage from avpriv_exif_decode_ifd() 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This prevents potential ABI issues with GetByteContext. Signed-off-by: James Almer --- libavcodec/exif.c | 16 +++++++++++++--- libavcodec/exif.h | 6 ++++-- libavcodec/mjpegdec.c | 2 +- libavcodec/webp.c | 2 +- libavformat/avidec.c | 4 ++-- 5 files changed, 21 insertions(+), 9 deletions(-) diff --git a/libavcodec/exif.c b/libavcodec/exif.c index 07ce1741c2..2874772db4 100644 --- a/libavcodec/exif.c +++ b/libavcodec/exif.c @@ -92,7 +92,7 @@ static int exif_decode_tag(void *logctx, GetByteContext *gbytes, int le, // store metadata or proceed with next IFD ret = ff_tis_ifd(id); if (ret) { - ret = avpriv_exif_decode_ifd(logctx, gbytes, le, depth + 1, metadata); + ret = ff_exif_decode_ifd(logctx, gbytes, le, depth + 1, metadata); } else { const char *name = exif_get_tag_name(id); char *use_name = (char*) name; @@ -119,8 +119,8 @@ static int exif_decode_tag(void *logctx, GetByteContext *gbytes, int le, } -int avpriv_exif_decode_ifd(void *logctx, GetByteContext *gbytes, int le, - int depth, AVDictionary **metadata) +int ff_exif_decode_ifd(void *logctx, GetByteContext *gbytes, + int le, int depth, AVDictionary **metadata) { int i, ret; int entries; @@ -140,3 +140,13 @@ int avpriv_exif_decode_ifd(void *logctx, GetByteContext *gbytes, int le, // return next IDF offset or 0x000000000 or a value < 0 for failure return ff_tget_long(gbytes, le); } + +int avpriv_exif_decode_ifd(void *logctx, const uint8_t *buf, int size, + int le, int depth, AVDictionary **metadata) +{ + GetByteContext gb; + + bytestream2_init(&gb, buf, size); + + return ff_exif_decode_ifd(logctx, &gb, le, depth, metadata); +} diff --git a/libavcodec/exif.h b/libavcodec/exif.h index 5f09208b9d..314065b4b2 100644 --- a/libavcodec/exif.h +++ b/libavcodec/exif.h @@ -164,7 +164,9 @@ static const struct exif_tag tag_list[] = { // JEITA CP-3451 EXIF specification: /** Recursively decodes all IFD's and * adds included TAGS into the metadata dictionary. */ -int avpriv_exif_decode_ifd(void *logctx, GetByteContext *gbytes, int le, - int depth, AVDictionary **metadata); +int avpriv_exif_decode_ifd(void *logctx, const uint8_t *buf, int size, + int le, int depth, AVDictionary **metadata); +int ff_exif_decode_ifd(void *logctx, GetByteContext *gbytes, + int le, int depth, AVDictionary **metadata); #endif /* AVCODEC_EXIF_H */ diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c index 5b2409755c..d980ac99a1 100644 --- a/libavcodec/mjpegdec.c +++ b/libavcodec/mjpegdec.c @@ -1867,7 +1867,7 @@ static int mjpeg_decode_app(MJpegDecodeContext *s) // read 0th IFD and store the metadata // (return values > 0 indicate the presence of subimage metadata) - ret = avpriv_exif_decode_ifd(s->avctx, &gbytes, le, 0, &s->exif_metadata); + ret = ff_exif_decode_ifd(s->avctx, &gbytes, le, 0, &s->exif_metadata); if (ret < 0) { av_log(s->avctx, AV_LOG_ERROR, "mjpeg: error decoding EXIF data\n"); } diff --git a/libavcodec/webp.c b/libavcodec/webp.c index efa864a6f1..c8475faa2d 100644 --- a/libavcodec/webp.c +++ b/libavcodec/webp.c @@ -1504,7 +1504,7 @@ static int webp_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, } bytestream2_seek(&exif_gb, ifd_offset, SEEK_SET); - if (avpriv_exif_decode_ifd(avctx, &exif_gb, le, 0, &exif_metadata) < 0) { + if (ff_exif_decode_ifd(avctx, &exif_gb, le, 0, &exif_metadata) < 0) { av_log(avctx, AV_LOG_ERROR, "error decoding Exif data\n"); goto exif_end; } diff --git a/libavformat/avidec.c b/libavformat/avidec.c index b8a31dcff2..3ff515d492 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -401,10 +401,10 @@ static int avi_extract_stream_metadata(AVFormatContext *s, AVStream *st) // skip 4 byte padding bytestream2_skip(&gb, 4); offset = bytestream2_tell(&gb); - bytestream2_init(&gb, data + offset, data_size - offset); // decode EXIF tags from IFD, AVI is always little-endian - return avpriv_exif_decode_ifd(s, &gb, 1, 0, &st->metadata); + return avpriv_exif_decode_ifd(s, data + offset, data_size - offset, + 1, 0, &st->metadata); break; case MKTAG('C', 'A', 'S', 'I'): avpriv_request_sample(s, "RIFF stream data tag type CASI (%u)", tag);