From patchwork Thu Jan 19 22:15:34 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 2261 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.89.21 with SMTP id n21csp480279vsb; Thu, 19 Jan 2017 14:16:03 -0800 (PST) X-Received: by 10.28.153.139 with SMTP id b133mr713954wme.93.1484864163678; Thu, 19 Jan 2017 14:16:03 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id l66si890588wma.43.2017.01.19.14.16.03; Thu, 19 Jan 2017 14:16:03 -0800 (PST) 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; 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 CF17168A528; Fri, 20 Jan 2017 00:15:49 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f65.google.com (mail-wm0-f65.google.com [74.125.82.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 94E28689E5F for ; Fri, 20 Jan 2017 00:15:43 +0200 (EET) Received: by mail-wm0-f65.google.com with SMTP id r144so2307780wme.0 for ; Thu, 19 Jan 2017 14:15:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=AYGBzUdbmk5WtiBlUBsM/GJfgHeqJipsPjlNq1talKM=; b=gOLg8hX+zcG79KmkvzX2vmS4Fq3Oksb3eci3Nxb9oLneqckohcLQeiQ8LAjcxEl/Sr s4U09JOn5wjqXcPKxp2nHhsVoxg8zGaSiU9mF5L/kh2CguYYrc35B7/7qHyOO+unem1R OGEP03vIFNfqFREO27hOqvm77e3BvVB7w2AjQ0yw+YFUzxs8PJtqppoItgXbk7hIfhkm EBizvml+Ad6qogz3SoGXuDQwVvPlxwWS4h/HuXxEIsRRqOEIYVDbESFmKAG9KATXtBxF pHEXw5T3RBCaZi+eBCfONG8kRQevzx2E4MMhLEV5Q7Ze34/pBjAhqzzfMFU7YFeMgNXa 0f9w== 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=AYGBzUdbmk5WtiBlUBsM/GJfgHeqJipsPjlNq1talKM=; b=W/wtEq3x5Rr7M/4O+tybA4Fmn7DXPAzG4X7P8+nXGD8JBgB8blkT+c3RJNWIBtv/F+ +3msge1zH3q5qlhIEiciIZUIyNObx//OGGa1ZKHUCNM+tE62KgYSbK67AKQEEzBZkBgu Jj9uLNHGSd2dM4KXU3PIPZRK5o3re6/0a+zfx+o6evqT0/Bm+kB47rQhUxRLKDFg/ud6 7CHaUz6NorkHkzPq9yY2r2/nidHqfvwPets32rY/sG+QIIBmcqZFiI6NH2LvDIK63ZHg vlU4jfRmd+xWPG1UxGiWQcyDpKtXR52PhOzU9ddnk3E+sOId3RiPlhZlwnX8lS4ISx1n AkYA== X-Gm-Message-State: AIkVDXLMGdfC7mChxId2b7mqEzW6Xj6LZ8daanUY5dTR72M4aREPydUJE/u8sZjylpvv/A== X-Received: by 10.28.74.221 with SMTP id n90mr729049wmi.114.1484864153803; Thu, 19 Jan 2017 14:15:53 -0800 (PST) Received: from localhost.localdomain ([109.227.48.244]) by smtp.gmail.com with ESMTPSA id g197sm1234537wmd.15.2017.01.19.14.15.52 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 19 Jan 2017 14:15:52 -0800 (PST) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Thu, 19 Jan 2017 23:15:34 +0100 Message-Id: <20170119221534.30364-1-onemda@gmail.com> X-Mailer: git-send-email 2.9.3 Subject: [FFmpeg-devel] [PATCH] avcodec/fraps: add support for PAL8 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" Signed-off-by: Paul B Mahol --- libavcodec/fraps.c | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/libavcodec/fraps.c b/libavcodec/fraps.c index 57e13f2..5ca6aff 100644 --- a/libavcodec/fraps.c +++ b/libavcodec/fraps.c @@ -146,6 +146,7 @@ static int decode_frame(AVCodecContext *avctx, uint32_t offs[4]; int i, j, ret, is_chroma; const int planes = 3; + int is_pal; uint8_t *out; if (buf_size < 4) { @@ -155,6 +156,7 @@ static int decode_frame(AVCodecContext *avctx, header = AV_RL32(buf); version = header & 0xff; + is_pal = buf[1] == 2 && version == 1; header_size = (header & (1<<30))? 8 : 4; /* bit 30 means pad to 8 bytes */ if (version > 5) { @@ -166,7 +168,16 @@ static int decode_frame(AVCodecContext *avctx, buf += header_size; - if (version < 2) { + if (is_pal) { + unsigned needed_size = avctx->width * avctx->height + 1024; + needed_size += header_size; + if (buf_size != needed_size) { + av_log(avctx, AV_LOG_ERROR, + "Invalid frame length %d (should be %d)\n", + buf_size, needed_size); + return AVERROR_INVALIDDATA; + } + } else if (version < 2) { unsigned needed_size = avctx->width * avctx->height * 3; if (version == 0) needed_size /= 2; needed_size += header_size; @@ -209,7 +220,7 @@ static int decode_frame(AVCodecContext *avctx, f->pict_type = AV_PICTURE_TYPE_I; f->key_frame = 1; - avctx->pix_fmt = version & 1 ? AV_PIX_FMT_BGR24 : AV_PIX_FMT_YUVJ420P; + avctx->pix_fmt = version & 1 ? is_pal ? AV_PIX_FMT_PAL8 : AV_PIX_FMT_BGR24 : AV_PIX_FMT_YUVJ420P; avctx->color_range = version & 1 ? AVCOL_RANGE_UNSPECIFIED : AVCOL_RANGE_JPEG; avctx->colorspace = version & 1 ? AVCOL_SPC_UNSPECIFIED : AVCOL_SPC_BT709; @@ -245,11 +256,25 @@ static int decode_frame(AVCodecContext *avctx, break; case 1: + if (is_pal) { + uint32_t *pal = (uint32_t *)f->data[1]; + + for (y = 0; y < 256; y++) { + pal[y] = AV_RL32(buf) | 0xFF000000; + buf += 4; + } + + for (y = 0; y height; y++) + memcpy(&f->data[0][y * f->linesize[0]], + &buf[y * avctx->width], + avctx->width); + } else { /* Fraps v1 is an upside-down BGR24 */ for (y = 0; yheight; y++) memcpy(&f->data[0][(avctx->height - y - 1) * f->linesize[0]], &buf[y * avctx->width * 3], 3 * avctx->width); + } break; case 2: