From patchwork Fri Apr 3 13:04:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 18586 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 5784844B97C for ; Fri, 3 Apr 2020 16:05:10 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 281AB68A466; Fri, 3 Apr 2020 16:05:10 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4A5B5688315 for ; Fri, 3 Apr 2020 16:05:03 +0300 (EEST) Received: by mail-pf1-f194.google.com with SMTP id n10so3461238pff.3 for ; Fri, 03 Apr 2020 06:05:03 -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; bh=oz/AiZ6L/irSOa6VxZp0EyWGEf3rb/twLv4rw//sZFw=; b=CVzakuHSnl6V7CsiNPxEB2LVYpEsKBqrEzw25tUq65D0981MycfaAIF2M6qjw2THpP OtXbdMGzfRNgalaANeCwUHbKZ3mXNvcgDKZtCc8Ub+PQdbh1x4gMk3wbO36rovr/0AwZ 08YIUjHNJuvhcWMXeWMwya8aJd4JT8DVQ9XAKexfa48N2b+MGJkfNld/TlN2OP+B5vOp U6Br+2qvx+1ZZq8mbWR+BQKh9WID9B1APFmmK+ZrpvpBUiG0arW2mqWMW0o6xrr6Vv6u cZV63EfOEw5I8oP/Q/si7P9gaElZkDWSO/zN1OoTLTaUvZCWRWKhUkWxEMYfL4QIzPdn ESyQ== 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; bh=oz/AiZ6L/irSOa6VxZp0EyWGEf3rb/twLv4rw//sZFw=; b=RXY6VL2tToGn0tsCEq8JgWVd49X/gb0U87jUVpDyV8O2XXgBox6LV03qIJbolN8gP/ wMxLXR0GRkYKCuCgzmLDrqnTKtx/+gyFztoKSlqcZDL1jp1Sbd1vFc0JxFjhcslKBN0W WaJb5azx2MzK28wgS2OkZALS0NibRO7n8Xp1aX9lVQMaMIscWCymxeEZ8GS0KgFunfac lur3D2p0f1cIEUQMMCVcOXfMWlUHWSI7RrF20+toN7fUt6v/sZOGtWs9mrsoi7eqyK/x FyWECOGYyNmM/nFSzDykdmQ10KdvrTokff/d+Lo6HKdQIg5b3PtXzp7i2+WCBpxjK2um PSNg== X-Gm-Message-State: AGi0PubeGTwfAdYTEFYJxAQgR3YoX2E0/re1Qlxgn/EybAhb5T3fH1Ds df8RxrJ3Yxp6+4qZc8MKFSByGnm/ X-Google-Smtp-Source: APiQypI0R/Y0yPiN0DUb70bEj9eeZzCDlZTV6Kvf261g1WJcCKh3eugFRqsofvArxJc2CrXq+D2mmw== X-Received: by 2002:a63:f45:: with SMTP id 5mr7898782pgp.31.1585919100481; Fri, 03 Apr 2020 06:05:00 -0700 (PDT) Received: from vpn.localdomain ([47.90.99.151]) by smtp.gmail.com with ESMTPSA id f8sm4233300pgc.75.2020.04.03.06.04.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 03 Apr 2020 06:04:59 -0700 (PDT) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Fri, 3 Apr 2020 21:04:53 +0800 Message-Id: <20200403130454.25228-1-lance.lmwang@gmail.com> X-Mailer: git-send-email 2.9.5 Subject: [FFmpeg-devel] [PATCH v1 1/2] avcodec/mpeg12enc: Use FF_PROFILE_MPEG2_xxx macros 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: Limin Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Limin Wang Signed-off-by: Limin Wang --- libavcodec/mpeg12enc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libavcodec/mpeg12enc.c b/libavcodec/mpeg12enc.c index b460e78a59..643ba8165a 100644 --- a/libavcodec/mpeg12enc.c +++ b/libavcodec/mpeg12enc.c @@ -162,17 +162,17 @@ static av_cold int encode_init(AVCodecContext *avctx) return -1; } /* Main or 4:2:2 */ - avctx->profile = s->chroma_format == CHROMA_420 ? 4 : 0; + avctx->profile = s->chroma_format == CHROMA_420 ? FF_PROFILE_MPEG2_MAIN : FF_PROFILE_MPEG2_422; } if (avctx->level == FF_LEVEL_UNKNOWN) { - if (avctx->profile == 0) { /* 4:2:2 */ + if (avctx->profile == FF_PROFILE_MPEG2_422) { /* 4:2:2 */ if (avctx->width <= 720 && avctx->height <= 608) avctx->level = 5; /* Main */ else avctx->level = 2; /* High */ } else { - if (avctx->profile != 1 && s->chroma_format != CHROMA_420) { + if (avctx->profile != FF_PROFILE_MPEG2_HIGH && s->chroma_format != CHROMA_420) { av_log(avctx, AV_LOG_ERROR, "Only High(1) and 4:2:2(0) profiles support 4:2:2 color sampling\n"); return -1; @@ -321,7 +321,7 @@ static void mpeg1_encode_sequence_header(MpegEncContext *s) put_header(s, EXT_START_CODE); put_bits(&s->pb, 4, 1); // seq ext - put_bits(&s->pb, 1, s->avctx->profile == 0); // escx 1 for 4:2:2 profile + put_bits(&s->pb, 1, s->avctx->profile == FF_PROFILE_MPEG2_422); // escx 1 for 4:2:2 profile put_bits(&s->pb, 3, s->avctx->profile); // profile put_bits(&s->pb, 4, s->avctx->level); // level From patchwork Fri Apr 3 13:04:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 18587 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 07EB144B8B9 for ; Fri, 3 Apr 2020 16:12:49 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DCB34689DC8; Fri, 3 Apr 2020 16:12:48 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D43C1689AE3 for ; Fri, 3 Apr 2020 16:12:42 +0300 (EEST) Received: by mail-pf1-f194.google.com with SMTP id u65so3466904pfb.4 for ; Fri, 03 Apr 2020 06:12:42 -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; bh=lXEcb7qcOep3ve9dtm+vaHPxFZpGA/K66Ejy0ZkpIYc=; b=urrOOLmpeX21+KAQj93Yy6yR4XBazEifw0YBMLPDPrqGT7nf+J7kTOlXGf2GHXsvMS p/eTeJ20kXYo9tZWp2YRMWU8s6JhnTyqfeoyWAgStTNgwoJYXCu9TZXcgT06vfPL3Iz6 +Qcm3AyUrPueOYZZy6fkjKG2WLGA/G2P8/rDjuAYM5oCL0i9rWRW+U4vY1M/bwYbZL3L IMnUKsinb8Jj8K6NogV/wt+sxvk5+9iab3EIFmvJfRQsPNLoB+vMYIO7dX0Yy3nnn+cC 7JRmiy2z5dZVRhKr749Ous0IsVPh21us+vjRYiWqha/yaZlst/GW/micYYweNAxd2/0E c5fg== 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; bh=lXEcb7qcOep3ve9dtm+vaHPxFZpGA/K66Ejy0ZkpIYc=; b=j+cSrgbXqTdMN2lR2LEY6UY1H0T1d1BX+IrspGBuW7xhg2hsAiQAp3diJr3oSjzKCW FDiFotEjkKVU/fpAE4PoOt52ktj4f7U9sJ9QeOC6qr/2NXWlPB5VnjdwkrypyYpAe6Hr IPkQXoFFCt48V1YrYJoZjCZRrq0ictTqiofpnIHb8OqstoW80Giu1xXsiS56kdvIEJPe 3X4gLPk/kX0PglrEN5nI8Dr6Kv4tgdVzS7LhT6n8VFH2rWltngQioiD8BVSma8OTL1gW Wn5aKmMnBQSKCqqUGGgpVa2tKJx4oqxRnzl5HwsJqkrfkqv6UBbacX471yFXd6mjjvnP Qe9A== X-Gm-Message-State: AGi0PuahwO5cvf5F6Ly9AZv7Y6/DSaEkqnMXk/17pc4rVDlEu3tKhUFF brG/yFp/IOGwb7T90kbsozdx9nMk X-Google-Smtp-Source: APiQypK+OMwKZygGBMcb1/GYQ57VVW9mCYkkWk0mk07he5h9PbcBJTNat51sDkRnS+GqUW6IWh/jMg== X-Received: by 2002:a63:2c44:: with SMTP id s65mr8224776pgs.227.1585919101938; Fri, 03 Apr 2020 06:05:01 -0700 (PDT) Received: from vpn.localdomain ([47.90.99.151]) by smtp.gmail.com with ESMTPSA id f8sm4233300pgc.75.2020.04.03.06.05.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 03 Apr 2020 06:05:01 -0700 (PDT) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Fri, 3 Apr 2020 21:04:54 +0800 Message-Id: <20200403130454.25228-2-lance.lmwang@gmail.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20200403130454.25228-1-lance.lmwang@gmail.com> References: <20200403130454.25228-1-lance.lmwang@gmail.com> Subject: [FFmpeg-devel] [PATCH v1 2/2] avcodec/mpeg12enc: Support mpeg2 encoder profile with const options 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: Limin Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Limin Wang make setting profile more user friendly Signed-off-by: Limin Wang --- doc/encoders.texi | 8 ++++++++ libavcodec/mpeg12enc.c | 19 ++++++++++++++----- libavcodec/mpegvideo.h | 1 + 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/doc/encoders.texi b/doc/encoders.texi index e23b6b32fe..5022b9407e 100644 --- a/doc/encoders.texi +++ b/doc/encoders.texi @@ -2753,6 +2753,14 @@ For maximum compatibility, use @samp{component}. @item a53cc @var{boolean} Import closed captions (which must be ATSC compatible format) into output. Default is 1 (on). +@item profile @var{integer} +Select the mpeg2 profile to encode, possible values: +@table @samp +@item 422 +@item high +@item main +@item simple +@end table @end table @section png diff --git a/libavcodec/mpeg12enc.c b/libavcodec/mpeg12enc.c index 643ba8165a..ef8757e5b7 100644 --- a/libavcodec/mpeg12enc.c +++ b/libavcodec/mpeg12enc.c @@ -156,23 +156,27 @@ static av_cold int encode_init(AVCodecContext *avctx) } } - if (avctx->profile == FF_PROFILE_UNKNOWN) { + if (s->profile == FF_PROFILE_UNKNOWN) { if (avctx->level != FF_LEVEL_UNKNOWN) { av_log(avctx, AV_LOG_ERROR, "Set profile and level\n"); return -1; } /* Main or 4:2:2 */ avctx->profile = s->chroma_format == CHROMA_420 ? FF_PROFILE_MPEG2_MAIN : FF_PROFILE_MPEG2_422; + s->profile = s->chroma_format == CHROMA_420 ? FF_PROFILE_MPEG2_MAIN : FF_PROFILE_MPEG2_422; + } else if (s->profile < FF_PROFILE_MPEG2_422) { + av_log(avctx, AV_LOG_ERROR, "Invalid mpeg2 profile set\n"); + return -1; } if (avctx->level == FF_LEVEL_UNKNOWN) { - if (avctx->profile == FF_PROFILE_MPEG2_422) { /* 4:2:2 */ + if (s->profile == FF_PROFILE_MPEG2_422) { /* 4:2:2 */ if (avctx->width <= 720 && avctx->height <= 608) avctx->level = 5; /* Main */ else avctx->level = 2; /* High */ } else { - if (avctx->profile != FF_PROFILE_MPEG2_HIGH && s->chroma_format != CHROMA_420) { + if (s->profile != FF_PROFILE_MPEG2_HIGH && s->chroma_format != CHROMA_420) { av_log(avctx, AV_LOG_ERROR, "Only High(1) and 4:2:2(0) profiles support 4:2:2 color sampling\n"); return -1; @@ -321,9 +325,9 @@ static void mpeg1_encode_sequence_header(MpegEncContext *s) put_header(s, EXT_START_CODE); put_bits(&s->pb, 4, 1); // seq ext - put_bits(&s->pb, 1, s->avctx->profile == FF_PROFILE_MPEG2_422); // escx 1 for 4:2:2 profile + put_bits(&s->pb, 1, s->profile == FF_PROFILE_MPEG2_422); // escx 1 for 4:2:2 profile - put_bits(&s->pb, 3, s->avctx->profile); // profile + put_bits(&s->pb, 3, s->profile); // profile put_bits(&s->pb, 4, s->avctx->level); // level put_bits(&s->pb, 1, s->progressive_sequence); @@ -1165,6 +1169,11 @@ static const AVOption mpeg2_options[] = { { "secam", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VIDEO_FORMAT_SECAM }, 0, 0, VE, "video_format" }, { "mac", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VIDEO_FORMAT_MAC }, 0, 0, VE, "video_format" }, { "unspecified", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VIDEO_FORMAT_UNSPECIFIED}, 0, 0, VE, "video_format" }, + { "profile", "Set the profile", OFFSET(profile), AV_OPT_TYPE_INT,{ .i64 = FF_PROFILE_UNKNOWN }, FF_PROFILE_UNKNOWN, FF_PROFILE_MPEG2_SIMPLE, VE, "profile" }, + { "422", "", 0, AV_OPT_TYPE_CONST,{ .i64 = FF_PROFILE_MPEG2_422 }, 0, 0, VE, "profile" }, + { "high", "", 0, AV_OPT_TYPE_CONST,{ .i64 = FF_PROFILE_MPEG2_HIGH }, 0, 0, VE, "profile" }, + { "main", "", 0, AV_OPT_TYPE_CONST,{ .i64 = FF_PROFILE_MPEG2_MAIN }, 0, 0, VE, "profile" }, + { "simple", "", 0, AV_OPT_TYPE_CONST,{ .i64 = FF_PROFILE_MPEG2_SIMPLE }, 0, 0, VE, "profile" }, FF_MPV_COMMON_OPTS { NULL }, }; diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 29e692f245..cee423eea1 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -456,6 +456,7 @@ typedef struct MpegEncContext { int progressive_sequence; int mpeg_f_code[2][2]; int a53_cc; + int profile; // picture structure defines are loaded from mpegutils.h int picture_structure;