From patchwork Sun Apr 16 16:48:05 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: 3432 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.3.129 with SMTP id 123csp973499vsd; Sun, 16 Apr 2017 09:55:10 -0700 (PDT) X-Received: by 10.223.176.117 with SMTP id g50mr15278732wra.93.1492361710261; Sun, 16 Apr 2017 09:55:10 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id t129si3377299wmb.21.2017.04.16.09.55.09; Sun, 16 Apr 2017 09:55:10 -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; 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 1C218689834; Sun, 16 Apr 2017 19:55:00 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr0-f194.google.com (mail-wr0-f194.google.com [209.85.128.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7E0F6689834 for ; Sun, 16 Apr 2017 19:54:53 +0300 (EEST) Received: by mail-wr0-f194.google.com with SMTP id l28so17928422wre.0 for ; Sun, 16 Apr 2017 09:55:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=AeRxxAeD8UZYsH+ErsbQXFDWjaOLI5Nxl3/vmiS+JRI=; b=keJ7JkZSyQbptYwdizTAAtYsD3PboR9KpSEyss8b1nRjtpqf3hHkl39G0ClQpdl270 ZfXZ+AUP/FeFotQuEXklMkFkgh2zFA6gn3WElCiM25RQd13CHm9PRRCODRt4O5KXJCXn uPgvvw3MQKWu8Tq/MChn5VrNxSzPkxBcP304UxLuvA1s8CkFKTUui5Nk3X+d42Od2jt4 rrkOec1qFB73uqPqha02nKyIrKJkXxd5hxZTlClmlpIiYNJNn8AUFJd5PxYq6wLFQH+z OIUAzvuAGQLceZ8wIu58zeIGRLFurl1gA0aaGAvyiUz1xYKjowCbB7CTXLouRQXut/Hv vAPA== 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:in-reply-to :references; bh=AeRxxAeD8UZYsH+ErsbQXFDWjaOLI5Nxl3/vmiS+JRI=; b=T2y71VqhfSrrbSB7stbC8+gAG+wUwfFJTwjF9FtCvFJw/hqeT8B4k8CEUXAQfLtLRa FCoth8Mjek79wiFXYXGFJfXYER4Q2dr3NpDLn3TIu/r34GlsBglTJZkFtax/Wd0Kume1 1cbwHFmWj8RRBxpZzSMOBvKrsLthDAqyWqF7jQdYq09yvHnuCt0jSOjZW+SKhlg3ZDGN 8Nz0IKUn7vjWERaTo8TyfD3fi3i3WJtiIPs8z4sZI6zC+RsLgf3UhpniSQX2qE2bTr8N SE5bVRWGZutPO9Su435t6h1Gf2phEoU7rX+05mCHfWMRlh2j3VkeJYAQSPeCSafsZDG1 jOnQ== X-Gm-Message-State: AN3rC/4X9UpcYxvaTxOEBAadNF6I0snFbdbVRq1s65Mq6l1oKGnWriAa 63jBOWWBlzKWRV5v X-Received: by 10.223.134.219 with SMTP id 27mr14750360wry.33.1492361308611; Sun, 16 Apr 2017 09:48:28 -0700 (PDT) Received: from localhost.localdomain ([94.250.174.60]) by smtp.gmail.com with ESMTPSA id d23sm4983105wra.6.2017.04.16.09.48.26 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 16 Apr 2017 09:48:27 -0700 (PDT) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Sun, 16 Apr 2017 18:48:05 +0200 Message-Id: <20170416164805.15765-2-onemda@gmail.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170416164805.15765-1-onemda@gmail.com> References: <20170416164805.15765-1-onemda@gmail.com> Subject: [FFmpeg-devel] [PATCH 2/2] avcodec: add Screen Recorder Gold Codec decoder 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 --- configure | 1 + libavcodec/Makefile | 1 + libavcodec/allcodecs.c | 1 + libavcodec/avcodec.h | 1 + libavcodec/codec_desc.c | 7 +++++++ libavcodec/mscc.c | 24 +++++++++++++++++++++--- libavformat/riff.c | 1 + 7 files changed, 33 insertions(+), 3 deletions(-) diff --git a/configure b/configure index 6d4eb2b..6f0d3ba 100755 --- a/configure +++ b/configure @@ -2531,6 +2531,7 @@ sonic_decoder_select="golomb rangecoder" sonic_encoder_select="golomb rangecoder" sonic_ls_encoder_select="golomb rangecoder" sp5x_decoder_select="mjpeg_decoder" +srgc_decoder_select="zlib" svq1_decoder_select="hpeldsp" svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc" svq3_decoder_select="golomb h264dsp h264parse h264pred hpeldsp tpeldsp videodsp" diff --git a/libavcodec/Makefile b/libavcodec/Makefile index cf5317d..86bc8fd 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -541,6 +541,7 @@ OBJS-$(CONFIG_SONIC_ENCODER) += sonic.o OBJS-$(CONFIG_SONIC_LS_ENCODER) += sonic.o OBJS-$(CONFIG_SPEEDHQ_DECODER) += speedhq.o simple_idct.o OBJS-$(CONFIG_SP5X_DECODER) += sp5xdec.o +OBJS-$(CONFIG_SRGC_DECODER) += mscc.o OBJS-$(CONFIG_SRT_DECODER) += srtdec.o ass.o htmlsubtitles.o OBJS-$(CONFIG_SRT_ENCODER) += srtenc.o ass_split.o OBJS-$(CONFIG_STL_DECODER) += textdec.o ass.o diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index 5a708b3..7fcc26f 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -317,6 +317,7 @@ static void register_all(void) REGISTER_ENCDEC (SNOW, snow); REGISTER_DECODER(SP5X, sp5x); REGISTER_DECODER(SPEEDHQ, speedhq); + REGISTER_DECODER(SRGC, srgc); REGISTER_ENCDEC (SUNRAST, sunrast); REGISTER_ENCDEC (SVQ1, svq1); REGISTER_DECODER(SVQ3, svq3); diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index da9d9dc..fc928a1 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -444,6 +444,7 @@ enum AVCodecID { AV_CODEC_ID_AV1, AV_CODEC_ID_BITPACKED, AV_CODEC_ID_MSCC, + AV_CODEC_ID_SRGC, /* various PCM "codecs" */ AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs diff --git a/libavcodec/codec_desc.c b/libavcodec/codec_desc.c index e342db7..2d28f84 100644 --- a/libavcodec/codec_desc.c +++ b/libavcodec/codec_desc.c @@ -1395,6 +1395,13 @@ static const AVCodecDescriptor codec_descriptors[] = { .long_name = NULL_IF_CONFIG_SMALL("Mandsoft Screen Capture Codec"), .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, + { + .id = AV_CODEC_ID_SRGC, + .type = AVMEDIA_TYPE_VIDEO, + .name = "srgc", + .long_name = NULL_IF_CONFIG_SMALL("Screen Recorder Gold Codec"), + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, + }, /* image codecs */ { diff --git a/libavcodec/mscc.c b/libavcodec/mscc.c index c42889a..6e4dbb0 100644 --- a/libavcodec/mscc.c +++ b/libavcodec/mscc.c @@ -121,6 +121,8 @@ static int decode_frame(AVCodecContext *avctx, { MSCCContext *s = avctx->priv_data; AVFrame *frame = data; + uint8_t *buf = avpkt->data; + int buf_size = avpkt->size; GetByteContext gb; PutByteContext pb; int ret, j; @@ -130,15 +132,19 @@ static int decode_frame(AVCodecContext *avctx, if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) return ret; - avpkt->data[2] ^= avpkt->data[0]; + if (avctx->codec_id == AV_CODEC_ID_MSCC) { + avpkt->data[2] ^= avpkt->data[0]; + buf += 2; + buf_size -= 2; + } ret = inflateReset(&s->zstream); if (ret != Z_OK) { av_log(avctx, AV_LOG_ERROR, "Inflate reset error: %d\n", ret); return AVERROR_UNKNOWN; } - s->zstream.next_in = avpkt->data + 2; - s->zstream.avail_in = avpkt->size - 2; + s->zstream.next_in = buf; + s->zstream.avail_in = buf_size; s->zstream.next_out = s->decomp_buf; s->zstream.avail_out = s->decomp_size; ret = inflate(&s->zstream, Z_FINISH); @@ -229,3 +235,15 @@ AVCodec ff_mscc_decoder = { .decode = decode_frame, .capabilities = AV_CODEC_CAP_DR1, }; + +AVCodec ff_srgc_decoder = { + .name = "srgc", + .long_name = NULL_IF_CONFIG_SMALL("Screen Recorder Gold Codec"), + .type = AVMEDIA_TYPE_VIDEO, + .id = AV_CODEC_ID_SRGC, + .priv_data_size = sizeof(MSCCContext), + .init = decode_init, + .close = decode_close, + .decode = decode_frame, + .capabilities = AV_CODEC_CAP_DR1, +}; diff --git a/libavformat/riff.c b/libavformat/riff.c index 294d11b..ac902fd 100644 --- a/libavformat/riff.c +++ b/libavformat/riff.c @@ -453,6 +453,7 @@ const AVCodecTag ff_codec_bmp_tags[] = { { AV_CODEC_ID_CLEARVIDEO, MKTAG('U', 'C', 'O', 'D') }, { AV_CODEC_ID_AV1, MKTAG('A', 'V', '0', '1') }, { AV_CODEC_ID_MSCC, MKTAG('M', 'S', 'C', 'C') }, + { AV_CODEC_ID_SRGC, MKTAG('S', 'R', 'G', 'C') }, { AV_CODEC_ID_NONE, 0 } };