From patchwork Sat Oct 17 18:22:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 23044 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 CACC144B29E for ; Sat, 17 Oct 2020 21:23:25 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id ACCAD68BB24; Sat, 17 Oct 2020 21:23:25 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f67.google.com (mail-wm1-f67.google.com [209.85.128.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 548AC68BA31 for ; Sat, 17 Oct 2020 21:23:24 +0300 (EEST) Received: by mail-wm1-f67.google.com with SMTP id z22so3234135wmi.0 for ; Sat, 17 Oct 2020 11:23:24 -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 :mime-version:content-transfer-encoding; bh=2depkfVSyyhSc2TiTyn02sFcX2Ua6VCYXWcmnZFbpTM=; b=OYdFUegbgf3cfjd1TaX5M5hWlCICchIkjQrYyGSXCDlzvYVXIXJMa0RIEmnMMGdRdr kVtzky4xLdH7bi8w5IC1wv6Qkvk9LZaeDbvlixe1CRx3IjvkQeKAKtlJQQjzSbOyVCTv VgxZrebLbZt95HVwXMHof8qEC/b4e5/2cYgCGFw9R1qeHiDYNOkRktyCxN0mANz6EGiV cgHp2753pN9BqNWCpzfyisOmd5T3dO+lt2P3r6X20OmjN4tTvcywVXA5piXddsgtmJRm wllFZ2ALtF2gxOcSdK99yTD8WHcGpiYmhGhcUqzc0G1JBVuN3jc8AIOHcjZ53+vdcZIY Y4IQ== 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:mime-version:content-transfer-encoding; bh=2depkfVSyyhSc2TiTyn02sFcX2Ua6VCYXWcmnZFbpTM=; b=OVqF17S+w4I03lw+f7iz327laqUDl27RgeUOf3Fy3j/37zIVO5cIJ7Pv6tpw1lFF2N waoac/rruD/a9OErMFnlN5a5s1WJjpMdkypOkPjrTp+YHq78Mr6rzX9eyeasCRs1etDo KPLV1WDI2yxThgsNq+isROeYKBKcFctqwXX7bDCAcn3UjtHwMH/slzjdlqmf30FsUT8/ /a8RHJmdwqT43frpfwvygMdkecZUfrASPuIPgdsbxUBPJ58Kep2pMFekEZOPrfuwXY31 BNhfF1yWunU0ez17GwO9DQzZfH+J740GKsw6CFBcoglsWIOcaUD2XgnR6wvVdKjW0rOA 9b9A== X-Gm-Message-State: AOAM532ukJmxDBkw8/VFvtaAc+9cI69YWq85RD487x/PuWlGFj3SOc1e yXwzTqMydNkVuktMCJukVuaFrXQLx9Q= X-Google-Smtp-Source: ABdhPJw3/1lsMAfLITiDpmlsHfBaNqw+4Lh8NgVfB6CMgforMSO0gqfffeE9ur+pK8NU41XpBkVuCQ== X-Received: by 2002:a1c:63c3:: with SMTP id x186mr9915615wmb.66.1602959003424; Sat, 17 Oct 2020 11:23:23 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id d20sm10440688wra.38.2020.10.17.11.23.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 17 Oct 2020 11:23:22 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 17 Oct 2020 20:22:47 +0200 Message-Id: <20201017182248.577108-10-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201017182248.577108-1-andreas.rheinhardt@gmail.com> References: <20201017182248.577108-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 10/11] avcodec/movtextdec: 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Improves readability. Signed-off-by: Andreas Rheinhardt --- libavcodec/movtextdec.c | 74 ++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 46 deletions(-) diff --git a/libavcodec/movtextdec.c b/libavcodec/movtextdec.c index e5ce58a184..95dfb2a0af 100644 --- a/libavcodec/movtextdec.c +++ b/libavcodec/movtextdec.c @@ -27,6 +27,7 @@ #include "libavutil/bprint.h" #include "libavutil/intreadwrite.h" #include "libavutil/mem.h" +#include "bytestream.h" #define STYLE_FLAG_BOLD (1<<0) #define STYLE_FLAG_ITALIC (1<<1) @@ -137,7 +138,7 @@ static void mov_text_cleanup_ftab(MovTextContext *m) static int mov_text_tx3g(AVCodecContext *avctx, MovTextContext *m) { - uint8_t *tx3g_ptr = avctx->extradata; + const uint8_t *tx3g_ptr = avctx->extradata; int i, j = -1, font_length, remaining = avctx->extradata_size - BOX_SIZE_INITIAL; int8_t v_align, h_align; unsigned ftab_entries; @@ -150,8 +151,8 @@ static int mov_text_tx3g(AVCodecContext *avctx, MovTextContext *m) // Display Flags tx3g_ptr += 4; // Alignment - h_align = *tx3g_ptr++; - v_align = *tx3g_ptr++; + h_align = bytestream_get_byte(&tx3g_ptr); + v_align = bytestream_get_byte(&tx3g_ptr); if (h_align == 0) { if (v_align == 0) m->d.alignment = TOP_LEFT; @@ -177,29 +178,24 @@ static int mov_text_tx3g(AVCodecContext *avctx, MovTextContext *m) m->d.alignment = BOTTOM_RIGHT; } // Background Color - m->d.back_color = AV_RB24(tx3g_ptr); - tx3g_ptr += 3; - m->d.back_alpha = AV_RB8(tx3g_ptr); - tx3g_ptr += 1; + m->d.back_color = bytestream_get_be24(&tx3g_ptr); + m->d.back_alpha = bytestream_get_byte(&tx3g_ptr); // BoxRecord tx3g_ptr += 8; // StyleRecord tx3g_ptr += 4; // fontID - m->d.fontID = AV_RB16(tx3g_ptr); - tx3g_ptr += 2; + m->d.fontID = bytestream_get_be16(&tx3g_ptr); // face-style-flags - s_default.style_flag = *tx3g_ptr++; + s_default.style_flag = bytestream_get_byte(&tx3g_ptr); m->d.bold = !!(s_default.style_flag & STYLE_FLAG_BOLD); m->d.italic = !!(s_default.style_flag & STYLE_FLAG_ITALIC); m->d.underline = !!(s_default.style_flag & STYLE_FLAG_UNDERLINE); // fontsize - m->d.fontsize = *tx3g_ptr++; + m->d.fontsize = bytestream_get_byte(&tx3g_ptr); // Primary color - m->d.color = AV_RB24(tx3g_ptr); - tx3g_ptr += 3; - m->d.alpha = AV_RB8(tx3g_ptr); - tx3g_ptr += 1; + m->d.color = bytestream_get_be24(&tx3g_ptr); + m->d.alpha = bytestream_get_byte(&tx3g_ptr); // FontRecord // FontRecord Size tx3g_ptr += 4; @@ -209,7 +205,7 @@ static int mov_text_tx3g(AVCodecContext *avctx, MovTextContext *m) // In case of broken header, init default font m->d.font = ASS_DEFAULT_FONT; - ftab_entries = AV_RB16(tx3g_ptr); + ftab_entries = bytestream_get_be16(&tx3g_ptr); if (!ftab_entries) return 0; remaining -= 3 * ftab_entries; @@ -219,14 +215,12 @@ static int mov_text_tx3g(AVCodecContext *avctx, MovTextContext *m) if (!m->ftab) return AVERROR(ENOMEM); m->ftab_entries = ftab_entries; - tx3g_ptr += 2; for (i = 0; i < m->ftab_entries; i++) { - m->ftab[i].fontID = AV_RB16(tx3g_ptr); + m->ftab[i].fontID = bytestream_get_be16(&tx3g_ptr); if (m->ftab[i].fontID == m->d.fontID) j = i; - tx3g_ptr += 2; - font_length = *tx3g_ptr++; + font_length = bytestream_get_byte(&tx3g_ptr); remaining -= font_length; if (remaining < 0) { @@ -238,9 +232,8 @@ static int mov_text_tx3g(AVCodecContext *avctx, MovTextContext *m) mov_text_cleanup_ftab(m); return AVERROR(ENOMEM); } - memcpy(m->ftab[i].font, tx3g_ptr, font_length); + bytestream_get_buffer(&tx3g_ptr, m->ftab[i].font, font_length); m->ftab[i].font[font_length] = '\0'; - tx3g_ptr = tx3g_ptr + font_length; } if (j >= 0) m->d.font = m->ftab[j].font; @@ -250,34 +243,31 @@ static int mov_text_tx3g(AVCodecContext *avctx, MovTextContext *m) static int decode_twrp(const uint8_t *tsmb, MovTextContext *m, AVPacket *avpkt) { m->box_flags |= TWRP_BOX; - m->w.wrap_flag = *tsmb++; + m->w.wrap_flag = bytestream_get_byte(&tsmb); return 0; } static int decode_hlit(const uint8_t *tsmb, MovTextContext *m, AVPacket *avpkt) { m->box_flags |= HLIT_BOX; - m->h.hlit_start = AV_RB16(tsmb); - tsmb += 2; - m->h.hlit_end = AV_RB16(tsmb); - tsmb += 2; + m->h.hlit_start = bytestream_get_be16(&tsmb); + m->h.hlit_end = bytestream_get_be16(&tsmb); return 0; } static int decode_hclr(const uint8_t *tsmb, MovTextContext *m, AVPacket *avpkt) { m->box_flags |= HCLR_BOX; - memcpy(m->c.hlit_color, tsmb, 4); - tsmb += 4; + bytestream_get_buffer(&tsmb, m->c.hlit_color, 4); return 0; } static int decode_styl(const uint8_t *tsmb, MovTextContext *m, AVPacket *avpkt) { int i; - int style_entries = AV_RB16(tsmb); + int style_entries = bytestream_get_be16(&tsmb); StyleBox *tmp; - tsmb += 2; + // A single style record is of length 12 bytes. if (m->tracksize + m->size_var + 2 + style_entries * 12 > avpkt->size) return -1; @@ -291,17 +281,14 @@ static int decode_styl(const uint8_t *tsmb, MovTextContext *m, AVPacket *avpkt) m->box_flags |= STYL_BOX; for(i = 0; i < m->style_entries; i++) { StyleBox *style = &m->s[i]; - style->style_start = AV_RB16(tsmb); - tsmb += 2; - style->style_end = AV_RB16(tsmb); + style->style_start = bytestream_get_be16(&tsmb); + style->style_end = bytestream_get_be16(&tsmb); if ( style->style_end < style->style_start || (i && style->style_start < m->s[i - 1].style_end)) { mov_text_cleanup(m); return AVERROR(ENOMEM); } - - tsmb += 2; if (style->style_start == style->style_end) { /* Skip this style as it applies to no character */ tsmb += 8; @@ -310,19 +297,14 @@ static int decode_styl(const uint8_t *tsmb, MovTextContext *m, AVPacket *avpkt) continue; } - style->style_fontID = AV_RB16(tsmb); - tsmb += 2; - style->style_flag = AV_RB8(tsmb); + style->style_fontID = bytestream_get_be16(&tsmb); + style->style_flag = bytestream_get_byte(&tsmb); style->bold = !!(style->style_flag & STYLE_FLAG_BOLD); style->italic = !!(style->style_flag & STYLE_FLAG_ITALIC); style->underline = !!(style->style_flag & STYLE_FLAG_UNDERLINE); - tsmb++; - style->fontsize = AV_RB8(tsmb); - tsmb++; - style->color = AV_RB24(tsmb); - tsmb += 3; - style->alpha = AV_RB8(tsmb); - tsmb++; + style->fontsize = bytestream_get_byte(&tsmb); + style->color = bytestream_get_be24(&tsmb); + style->alpha = bytestream_get_byte(&tsmb); } return 0; }