From patchwork Mon Jul 13 11:16:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jean-Baptiste Kempf X-Patchwork-Id: 20987 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 56AEE44B1FE for ; Mon, 13 Jul 2020 14:16:31 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1B8F1687FE4; Mon, 13 Jul 2020 14:16:31 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4ED1D687FE4 for ; Mon, 13 Jul 2020 14:16:24 +0300 (EEST) Received: by mail-wr1-f50.google.com with SMTP id f2so15893653wrp.7 for ; Mon, 13 Jul 2020 04:16:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=MmiNp1S5pph9BmEFMhQ6D5oKzIbycVxpTGY/cDbG/qY=; b=uxAnjSklr/fa2Y5bX3qovn+6QL0XD1hp+tbWub8CIvuipy1mfSKT2sY8iyH9EtjdWl xL3wTPxrL/Pfie/mP09umajo4tZSumLlpylPkXKMdz1SmEkDQbsWtnAmO/6aSSDKvlYr x0UV8TAnO/rcQJ/+HRkNXAjMY60zJH1y9obmRcf+InR4jSN6Ou7o6jTO8FlLfPm/w05F 8LqSZfCz6aMBCFZejz9nhgEMnDxr+uNSBy1SWPJCtgBsITnSZumfuDPHe7fr3CwlayGy yMGC4enpNc02dcsCnLFZtmNbABSyiFsTyhW71uOiHpuUlbscIVaHkSZNeqj/o6EXXW1b NpEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :mime-version:content-transfer-encoding; bh=MmiNp1S5pph9BmEFMhQ6D5oKzIbycVxpTGY/cDbG/qY=; b=FGYl0nVvLcu22WQbffPDVFNsIblzVFj3WrAQxXskFzIhdPx1EYYXX/CE5EK2GU3wxb evf8qRk9bOGH70mM3QZvOVjRCUilNEt1NsbiuF4EIbqtmN0Xx9oLNmPtuwYOAjIYla8I MEHM2ELSkbYQhaQn4qY4C13pv7y7XxyVkO1EuHIlluI9A51JUqMwjj0jO48Yak65JXY9 TbotQ+QYJyZj8Q0D81DQ6JOqCPrEDKlNkvUFsu21D6nglgj/xLTet+fqqFR2X4/awunq 0XsIIaLwQmZ7plRFm9TlR4nrZNLeG0qsaMdAMNZUbWDfGsFo+DmNecPKAB9Q7wm7FPNB EDJA== X-Gm-Message-State: AOAM531n1JNNqznATgdb+go+MEafc9kDJiklnq0xZxBEWhOwmWczXc4C 2EtprX0EBgKnUy51ga3tORtf9S1Rxck= X-Google-Smtp-Source: ABdhPJzmpYDbBSQ0yfzOUS25jT1jItuQF5pxEbP1kL5JYhCzIROR1FylC5eV60crzx6iIOdssFvuGw== X-Received: by 2002:adf:f707:: with SMTP id r7mr78104909wrp.70.1594638982809; Mon, 13 Jul 2020 04:16:22 -0700 (PDT) Received: from localhost.localdomain ([2a01:e0a:14f:f4d0:d145:7cad:1f3d:8c6b]) by smtp.gmail.com with ESMTPSA id t16sm24444526wru.9.2020.07.13.04.16.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2020 04:16:22 -0700 (PDT) From: Jean-Baptiste Kempf To: ffmpeg-devel@ffmpeg.org Date: Mon, 13 Jul 2020 13:16:18 +0200 Message-Id: <20200713111619.226490-1-jb@videolan.org> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] mpeg2: Renaming functions around init_uni_ac_vlc 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: Jean-Baptiste Kempf Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" We need to export init_uni_ac_vlc to init_uni_ac_vlc and therefore need renaming ff_init_uni_ac_vlc to ff_init_uni_ac_huffman for the following patch. --- libavcodec/mjpegenc.c | 4 ++-- libavcodec/mjpegenc_common.c | 6 +++--- libavcodec/mjpegenc_common.h | 2 +- libavcodec/mpeg12.h | 2 ++ libavcodec/mpeg12enc.c | 6 +++--- libavcodec/speedhq.c | 2 +- 6 files changed, 12 insertions(+), 10 deletions(-) diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c index 56ccbc5fb1..eaa739306a 100644 --- a/libavcodec/mjpegenc.c +++ b/libavcodec/mjpegenc.c @@ -106,8 +106,8 @@ av_cold int ff_mjpeg_encode_init(MpegEncContext *s) avpriv_mjpeg_bits_ac_chrominance, avpriv_mjpeg_val_ac_chrominance); - ff_init_uni_ac_vlc(m->huff_size_ac_luminance, m->uni_ac_vlc_len); - ff_init_uni_ac_vlc(m->huff_size_ac_chrominance, m->uni_chroma_ac_vlc_len); + ff_init_uni_ac_huffman(m->huff_size_ac_luminance, m->uni_ac_vlc_len); + ff_init_uni_ac_huffman(m->huff_size_ac_chrominance, m->uni_chroma_ac_vlc_len); s->intra_ac_vlc_length = s->intra_ac_vlc_last_length = m->uni_ac_vlc_len; s->intra_chroma_ac_vlc_length = diff --git a/libavcodec/mjpegenc_common.c b/libavcodec/mjpegenc_common.c index 3038ebde6e..fed32efc67 100644 --- a/libavcodec/mjpegenc_common.c +++ b/libavcodec/mjpegenc_common.c @@ -36,7 +36,7 @@ #include "mjpegenc_huffman.h" #include "mjpeg.h" -av_cold void ff_init_uni_ac_vlc(const uint8_t huff_size_ac[256], uint8_t *uni_ac_vlc_len) +av_cold void ff_init_uni_ac_huffman(const uint8_t huff_size_ac[256], uint8_t *uni_ac_vlc_len) { int i; @@ -551,8 +551,8 @@ int ff_mjpeg_encode_stuffing(MpegEncContext *s) // Replace the VLCs with the optimal ones. // The default ones may be used for trellis during quantization. - ff_init_uni_ac_vlc(m->huff_size_ac_luminance, m->uni_ac_vlc_len); - ff_init_uni_ac_vlc(m->huff_size_ac_chrominance, m->uni_chroma_ac_vlc_len); + ff_init_uni_ac_huffman(m->huff_size_ac_luminance, m->uni_ac_vlc_len); + ff_init_uni_ac_huffman(m->huff_size_ac_chrominance, m->uni_chroma_ac_vlc_len); s->intra_ac_vlc_length = s->intra_ac_vlc_last_length = m->uni_ac_vlc_len; s->intra_chroma_ac_vlc_length = diff --git a/libavcodec/mjpegenc_common.h b/libavcodec/mjpegenc_common.h index e8698d18c6..c24fee0b4e 100644 --- a/libavcodec/mjpegenc_common.h +++ b/libavcodec/mjpegenc_common.h @@ -41,6 +41,6 @@ void ff_mjpeg_init_hvsample(AVCodecContext *avctx, int hsample[4], int vsample[4 void ff_mjpeg_encode_dc(PutBitContext *pb, int val, uint8_t *huff_size, uint16_t *huff_code); -av_cold void ff_init_uni_ac_vlc(const uint8_t huff_size_ac[256], uint8_t *uni_ac_vlc_len); +av_cold void ff_init_uni_ac_huffman(const uint8_t huff_size_ac[256], uint8_t *uni_ac_vlc_len); #endif /* AVCODEC_MJPEGENC_COMMON_H */ diff --git a/libavcodec/mpeg12.h b/libavcodec/mpeg12.h index 1ec99f17e1..f01d7197ff 100644 --- a/libavcodec/mpeg12.h +++ b/libavcodec/mpeg12.h @@ -77,4 +77,6 @@ void ff_mpeg12_find_best_frame_rate(AVRational frame_rate, int *code, int *ext_n, int *ext_d, int nonstandard); +void ff_init_uni_ac_vlc(RLTable *rl, uint8_t *uni_ac_vlc_len); + #endif /* AVCODEC_MPEG12_H */ diff --git a/libavcodec/mpeg12enc.c b/libavcodec/mpeg12enc.c index 9fbbcef607..c33e20604e 100644 --- a/libavcodec/mpeg12enc.c +++ b/libavcodec/mpeg12enc.c @@ -64,7 +64,7 @@ static int8_t mpeg1_max_level[2][64]; #define A53_MAX_CC_COUNT 0x1f -static av_cold void init_uni_ac_vlc(RLTable *rl, uint8_t *uni_ac_vlc_len) +av_cold void ff_init_uni_ac_vlc(RLTable *rl, uint8_t *uni_ac_vlc_len) { int i; @@ -1054,9 +1054,9 @@ av_cold void ff_mpeg1_encode_init(MpegEncContext *s) mpeg1_index_run[0][i] = ff_rl_mpeg1.index_run[0][i]; } - init_uni_ac_vlc(&ff_rl_mpeg1, uni_mpeg1_ac_vlc_len); + ff_init_uni_ac_vlc(&ff_rl_mpeg1, uni_mpeg1_ac_vlc_len); if (s->intra_vlc_format) - init_uni_ac_vlc(&ff_rl_mpeg2, uni_mpeg2_ac_vlc_len); + ff_init_uni_ac_vlc(&ff_rl_mpeg2, uni_mpeg2_ac_vlc_len); /* build unified dc encoding tables */ for (i = -255; i < 256; i++) { diff --git a/libavcodec/speedhq.c b/libavcodec/speedhq.c index b834b79f28..86eb725398 100644 --- a/libavcodec/speedhq.c +++ b/libavcodec/speedhq.c @@ -132,7 +132,7 @@ static const uint8_t speedhq_run[121] = { 31, }; -static RLTable ff_rl_speedhq = { +RLTable ff_rl_speedhq = { 121, 121, (const uint16_t (*)[])speedhq_vlc, From patchwork Mon Jul 13 11:16:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jean-Baptiste Kempf X-Patchwork-Id: 20988 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 E135444B1FE for ; Mon, 13 Jul 2020 14:16:34 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CAE0D68B255; Mon, 13 Jul 2020 14:16:34 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9C3C568A427 for ; Mon, 13 Jul 2020 14:16:28 +0300 (EEST) Received: by mail-wr1-f48.google.com with SMTP id r12so15904978wrj.13 for ; Mon, 13 Jul 2020 04:16:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=pZt6YPB+PAF54ll1EtRpTqdXxcObvBbDnxTbALfuLGE=; b=VuWKwXZCOmKi8/MGHkfZqLIMUKUmzMQGYIJ7z/yXXRBpGumASGPJS3uS9JS8s605R3 jMf3Gy0gsrTOiFJdVNQSn2gX+nJrKqB+ofS9Qv2h1/9o21Xkd0KKnzfn35F+8PbUgpvK 3Nb0DstEiPhTrb755gEPMmONd+LikJpRIZzKNmM2vTyDAwzZYdE84lDPZsmev/FQyO++ LmjsGxxgzldno5h/ilnnsftmSC1q8gddXHclhSvc4keFSZiFC3Rf9lE3xBVcl6Kl5wBF 3Ierm1jXrTw+WpJThGVR8ZuJufSWwztQBPq4TLJ8GgHMNY2bbQhZjcDHlyASGpzigK0Y laxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=pZt6YPB+PAF54ll1EtRpTqdXxcObvBbDnxTbALfuLGE=; b=uetwRyxzGu0jaeIMs1FChzh+YGPd1QcZEeWHDSuoYzSZ1rExvEwEcLHcHXkP9NH1Hc kOMdQWnlyHP4TU92ZgX5MYcCQxfYp2lv9kKCKOvy/jQL+w7BAxK5ASHLSq8sCgdT+gdl Vi9mnDaE8bqnE0LPe3iR8T8BXK4GYuDCCRIpOYayLfjGZdn3jYJni9nlmnK2lu3hf3jm FVs/f4ClJzMqzmxMXVrbACIQO5GunSocwpA4NKqCvwcO9pGIjqoddU730drBEww8JXNF eQpZMe2qcTY6H/N2sXRnTK5MM7Z5m6EgkU9UN+8FR4oqVZj/+cvXbMRVui/4EsFH0FqQ lEfw== X-Gm-Message-State: AOAM533pKV6N3L6qZHn1VRLujL1EZFTHbWV10Q18fKze7z5QkDTgKSYp fDeoWkqXAaCMMaMbQx9cBNPCuZLStVc= X-Google-Smtp-Source: ABdhPJxewn0mDfM+sZYY0a++McmJerTB17TxtuHYBcsntiZ8Pvj7ODx4ddHyrKQRYA1Ao0m9FvQaWQ== X-Received: by 2002:a5d:4682:: with SMTP id u2mr77758798wrq.407.1594638987449; Mon, 13 Jul 2020 04:16:27 -0700 (PDT) Received: from localhost.localdomain ([2a01:e0a:14f:f4d0:d145:7cad:1f3d:8c6b]) by smtp.gmail.com with ESMTPSA id t16sm24444526wru.9.2020.07.13.04.16.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jul 2020 04:16:26 -0700 (PDT) From: Jean-Baptiste Kempf To: ffmpeg-devel@ffmpeg.org Date: Mon, 13 Jul 2020 13:16:19 +0200 Message-Id: <20200713111619.226490-2-jb@videolan.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200713111619.226490-1-jb@videolan.org> References: <20200713111619.226490-1-jb@videolan.org> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] SpeedHQ encoder 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: Jean-Baptiste Kempf Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This is heavily based on MPEG-2 encoder, of course. --- Changelog | 1 + doc/general.texi | 2 +- libavcodec/Makefile | 1 + libavcodec/allcodecs.c | 1 + libavcodec/mpegutils.h | 1 + libavcodec/mpegvideo.h | 3 +++ libavcodec/mpegvideo_enc.c | 52 +++++++++++++++++++++++++++++++++++--- libavcodec/version.h | 2 +- 8 files changed, 58 insertions(+), 5 deletions(-) diff --git a/Changelog b/Changelog index 49fc260458..8f3dcbec87 100644 --- a/Changelog +++ b/Changelog @@ -7,6 +7,7 @@ version : - PGX decoder - chromanr video filter - VDPAU accelerated HEVC 10/12bit decoding +- SpeedHQ encoder version 4.3: diff --git a/doc/general.texi b/doc/general.texi index 53d556c56c..7ab1c61267 100644 --- a/doc/general.texi +++ b/doc/general.texi @@ -971,7 +971,7 @@ following image formats are supported: @item MPEG-4 part 2 Microsoft variant version 1 @tab @tab X @item MPEG-4 part 2 Microsoft variant version 2 @tab X @tab X @item MPEG-4 part 2 Microsoft variant version 3 @tab X @tab X -@item Newtek SpeedHQ @tab @tab X +@item Newtek SpeedHQ @tab X @tab X @item Nintendo Gamecube THP video @tab @tab X @item NotchLC @tab @tab X @item NuppelVideo/RTjpeg @tab @tab X diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 18353da549..52445130f4 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -614,6 +614,7 @@ OBJS-$(CONFIG_SONIC_DECODER) += sonic.o OBJS-$(CONFIG_SONIC_ENCODER) += sonic.o OBJS-$(CONFIG_SONIC_LS_ENCODER) += sonic.o OBJS-$(CONFIG_SPEEDHQ_DECODER) += speedhq.o mpeg12.o mpeg12data.o simple_idct.o +OBJS-$(CONFIG_SPEEDHQ_ENCODER) += speedhq.o mpeg12data.o speedhqenc.o OBJS-$(CONFIG_SP5X_DECODER) += sp5xdec.o OBJS-$(CONFIG_SRGC_DECODER) += mscc.o OBJS-$(CONFIG_SRT_DECODER) += srtdec.o ass.o htmlsubtitles.o diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index a5048290f7..b542910303 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -290,6 +290,7 @@ extern AVCodec ff_snow_encoder; extern AVCodec ff_snow_decoder; extern AVCodec ff_sp5x_decoder; extern AVCodec ff_speedhq_decoder; +extern AVCodec ff_speedhq_encoder; extern AVCodec ff_srgc_decoder; extern AVCodec ff_sunrast_encoder; extern AVCodec ff_sunrast_decoder; diff --git a/libavcodec/mpegutils.h b/libavcodec/mpegutils.h index 1ed21c19be..81f0b73bb1 100644 --- a/libavcodec/mpegutils.h +++ b/libavcodec/mpegutils.h @@ -125,6 +125,7 @@ enum OutputFormat { FMT_H261, FMT_H263, FMT_MJPEG, + FMT_SPEEDHQ, }; diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 29e692f245..974c71b6bd 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -444,6 +444,9 @@ typedef struct MpegEncContext { int inter_intra_pred; int mspel; + /* SpeedHQ specific */ + int slice_start; + /* decompression specific */ GetBitContext gb; diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index c3ef40556a..221079452c 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -51,6 +51,7 @@ #include "mathops.h" #include "mpegutils.h" #include "mjpegenc.h" +#include "speedhqenc.h" #include "msmpeg4.h" #include "pixblockdsp.h" #include "qpeldsp.h" @@ -326,6 +327,15 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx) return AVERROR(EINVAL); } break; + case AV_CODEC_ID_SPEEDHQ: + if (avctx->pix_fmt != AV_PIX_FMT_YUV420P && + avctx->pix_fmt != AV_PIX_FMT_YUV422P && + avctx->pix_fmt != AV_PIX_FMT_YUV444P) { + av_log(avctx, AV_LOG_ERROR, + "only YUV420/YUV422/YUV444 are supported (no alpha support yet)\n"); + return AVERROR(EINVAL); + } + break; default: if (avctx->pix_fmt != AV_PIX_FMT_YUV420P) { av_log(avctx, AV_LOG_ERROR, "only YUV420 is supported\n"); @@ -732,7 +742,7 @@ FF_ENABLE_DEPRECATION_WARNINGS //return -1; } - if (s->mpeg_quant || s->codec_id == AV_CODEC_ID_MPEG1VIDEO || s->codec_id == AV_CODEC_ID_MPEG2VIDEO || s->codec_id == AV_CODEC_ID_MJPEG || s->codec_id==AV_CODEC_ID_AMV) { + if (s->mpeg_quant || s->codec_id == AV_CODEC_ID_MPEG1VIDEO || s->codec_id == AV_CODEC_ID_MPEG2VIDEO || s->codec_id == AV_CODEC_ID_MJPEG || s->codec_id==AV_CODEC_ID_AMV || s->codec_id == AV_CODEC_ID_SPEEDHQ) { // (a + x * 3 / 8) / x s->intra_quant_bias = 3 << (QUANT_BIAS_SHIFT - 3); s->inter_quant_bias = 0; @@ -783,6 +793,16 @@ FF_ENABLE_DEPRECATION_WARNINGS avctx->delay = 0; s->low_delay = 1; break; + case AV_CODEC_ID_SPEEDHQ: + s->out_format = FMT_SPEEDHQ; + s->intra_only = 1; /* force intra only for SHQ */ + if (!CONFIG_SPEEDHQ_ENCODER) + return AVERROR_ENCODER_NOT_FOUND; + if ((ret = ff_speedhq_encode_init(s)) < 0) + return ret; + avctx->delay = 0; + s->low_delay = 1; + break; case AV_CODEC_ID_H261: if (!CONFIG_H261_ENCODER) return AVERROR_ENCODER_NOT_FOUND; @@ -997,6 +1017,9 @@ FF_ENABLE_DEPRECATION_WARNINGS } else if (s->out_format == FMT_H263 || s->out_format == FMT_H261) { s->intra_matrix[j] = s->inter_matrix[j] = ff_mpeg1_default_non_intra_matrix[i]; + } else if (CONFIG_SPEEDHQ_ENCODER && s->codec_id == AV_CODEC_ID_SPEEDHQ) { + s->intra_matrix[j] = + s->inter_matrix[j] = ff_mpeg1_default_intra_matrix[i]; } else { /* MPEG-1/2 */ s->chroma_intra_matrix[j] = @@ -2562,6 +2585,10 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s, if (CONFIG_MJPEG_ENCODER) ff_mjpeg_encode_mb(s, s->block); break; + case AV_CODEC_ID_SPEEDHQ: + if (CONFIG_SPEEDHQ_ENCODER) + ff_speedhq_encode_mb(s, s->block); + break; default: av_assert1(0); } @@ -2816,6 +2843,8 @@ static void write_slice_end(MpegEncContext *s){ ff_mpeg4_stuffing(&s->pb); }else if(CONFIG_MJPEG_ENCODER && s->out_format == FMT_MJPEG){ ff_mjpeg_encode_stuffing(s); + }else if(CONFIG_SPEEDHQ_ENCODER && s->out_format == FMT_SPEEDHQ){ + ff_speedhq_end_slice(s); } avpriv_align_put_bits(&s->pb); @@ -2906,7 +2935,7 @@ int ff_mpv_reallocate_putbitbuffer(MpegEncContext *s, size_t threshold, size_t s static int encode_thread(AVCodecContext *c, void *arg){ MpegEncContext *s= *(void**)arg; - int mb_x, mb_y; + int mb_x, mb_y, mb_y_order; int chr_h= 16>>s->chroma_y_shift; int i, j; MpegEncContext best_s = { 0 }, backup_s; @@ -2967,7 +2996,16 @@ static int encode_thread(AVCodecContext *c, void *arg){ s->resync_mb_y=0; s->first_slice_line = 1; s->ptr_lastgob = s->pb.buf; - for(mb_y= s->start_mb_y; mb_y < s->end_mb_y; mb_y++) { + for(mb_y_order= s->start_mb_y; mb_y_order < s->end_mb_y; mb_y_order++) { + if (s->codec_id == AV_CODEC_ID_SPEEDHQ) { + int first_in_slice; + mb_y = ff_speedhq_mb_y_order_to_mb(mb_y_order, s->mb_height, &first_in_slice); + if (first_in_slice && mb_y_order != s->start_mb_y) + ff_speedhq_end_slice(s); + s->last_dc[0] = s->last_dc[1] = s->last_dc[2] = 1024 << s->intra_dc_precision; + } else { + mb_y = mb_y_order; + } s->mb_x=0; s->mb_y= mb_y; @@ -3855,6 +3893,10 @@ static int encode_picture(MpegEncContext *s, int picture_number) s->chroma_intra_matrix, s->intra_quant_bias, 8, 8, 1); s->qscale= 8; } + if (s->out_format == FMT_SPEEDHQ) { + s->y_dc_scale_table= + s->c_dc_scale_table= ff_mpeg2_dc_scale_table[3]; + } //FIXME var duplication s->current_picture_ptr->f->key_frame = @@ -3873,6 +3915,10 @@ static int encode_picture(MpegEncContext *s, int picture_number) ff_mjpeg_encode_picture_header(s->avctx, &s->pb, &s->intra_scantable, s->pred, s->intra_matrix, s->chroma_intra_matrix); break; + case FMT_SPEEDHQ: + if (CONFIG_SPEEDHQ_ENCODER) + ff_speedhq_encode_picture_header(s); + break; case FMT_H261: if (CONFIG_H261_ENCODER) ff_h261_encode_picture_header(s, picture_number); diff --git a/libavcodec/version.h b/libavcodec/version.h index e75891d463..3e34af5348 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #define LIBAVCODEC_VERSION_MAJOR 58 #define LIBAVCODEC_VERSION_MINOR 95 -#define LIBAVCODEC_VERSION_MICRO 100 +#define LIBAVCODEC_VERSION_MICRO 101 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \