From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id C0A1D45F91 for ; Tue, 18 Feb 2025 11:27:35 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BD24F68C033; Tue, 18 Feb 2025 13:27:32 +0200 (EET) Received: from out162-62-57-64.mail.qq.com (out162-62-57-64.mail.qq.com [162.62.57.64]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8EDC768BBD3 for ; Tue, 18 Feb 2025 13:27:25 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1739878042; bh=uOArFwfMphwfPVXzfsGW9X5Zg9EzofUN80U1QKjrdkY=; h=From:To:Cc:Subject:Date; b=qmxMKQjkvFceytLVJLE1AIt7uafSjN1fiX1z72JzwQb1SC8gVbOqetPBuMwzESHJP Plyv3hP2Xt8bvSUOiz5qyzUlqp17t/WKKKPQ14ZAdVOHPmeUUHYyRanSv2hUNfxLcK mHJ7QPSohIAAfY0KOVKPVGCq2Ov6g4l6BxmvKYs4= Received: from localhost.localdomain ([119.147.10.242]) by newxmesmtplogicsvrszc13-0.qq.com (NewEsmtp) with SMTP id 64712E28; Tue, 18 Feb 2025 19:25:07 +0800 X-QQ-mid: xmsmtpt1739877907t1br8xupl Message-ID: X-QQ-XMAILINFO: NMiAo2azIaDAeiO9/Pz82UL/eKVR1lGryscDbYjtEU/BX4lmyShHnUVOMt3SXn xxuBB+VTE7hz3VTZ3G4r+TPVni0w5MojKCq1dJlXX9waFQ0jAT6XzgYuNun9AKX13swbClxHIiMb v50RzAbMyuhCWoss4XquoEOZvNNXoTqF8SbtuB3P0OyO4+JkI+wEmmpZqaWnMUcvLPCj5CGuYn8c ui0bBbnQK95uE9Bru3f3m9Fpz9trUuUkfztizxz7zFi9aj7cESkuzpZ9n1ECppf4AJBgdFlgc/wz aeMiP608UaXaROvYioics8YgZpnwpJLjOcyYaW1ZoXXnrOfxPu2M+yFFtdvmOneH6n+Ndy7dxpdt uNCWHbSLJZZsRCGAgwvaNZA4PyZjpZmFaljqV4NQTIAiqAVbZF4VsmO0kJ0QmunpP3ba7OykQaXD RbBq7pgtmlECQqdYoHbhB/f7QG3wv8v4ZPoO81gPT7ipO955Bl2td3fuZEu/92UaHZhp0PReot23 JFuNRqp7q210g7UTet4GAZqmKgFwmnTFwLcLGsZJwcSrOtxKByE5znxjF89Qr1AytZ+veEDSgGi2 JpotEVnp/rlGJvZvdezJGI06CX7OKb5v1O/RAMOzuM6OM1OH6IV/3lgPQuo7Lh4FQNT8juvswpSn Ad40FrNPV/bXrFfPbobc4zIWZB+4OVwgEFfrYjvlY1aE8tlyDhvFAA+BCDF56FGfyiaTHt5S20TW 3qxJ34C1hg1LLMJqfJWcyWovY0+gTdTh4afquEtCCyrKK6QoSOh43gqiOwo4FVPOlvvQso9aKE2R C+yC5/7w76Vy/NpkbfJ80z9sfqqcNCA+dnkyxxK7nwuvxdkqN/nLb8SAYzjeTJpA5b+Czf0W5MjI T7ZabPQggZU1lQEARBURwfQavKiWLfEDgwUqOLM3Pt3mLCkI7USsEgP0FMxSBF69r5zUYZ4xcom4 /bRXHQMcicjjrUkjJz/1hTUZydQPUFl06KSfEktplospdnGUB5zYy6x1gbWMMfpceQJlMUZzWfMr RGytdV0EE6sl1/sKgY X-QQ-XMRINFO: OD9hHCdaPRBwq3WW+NvGbIU= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Tue, 18 Feb 2025 19:25:06 +0800 X-OQ-MSGID: <20250218112506.59664-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.46.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/3] avcodec/libuavs3d: process extradata X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Zhao Zhili Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: From: Zhao Zhili --- libavcodec/libuavs3d.c | 120 ++++++++++++++++++++++++++++++----------- 1 file changed, 89 insertions(+), 31 deletions(-) diff --git a/libavcodec/libuavs3d.c b/libavcodec/libuavs3d.c index 53b5faafc5..a22494340c 100644 --- a/libavcodec/libuavs3d.c +++ b/libavcodec/libuavs3d.c @@ -106,6 +106,91 @@ FF_ENABLE_DEPRECATION_WARNINGS uavs3d_img_cpy_cvt(&frm_out, dec_frame, dec_frame->bit_depth); } +#define UAVS3D_CHECK_INVALID_RANGE(v, l, r) ((v)<(l)||(v)>(r)) + +static int libuavs3d_on_seq_header(AVCodecContext *avctx) +{ + uavs3d_context *h = avctx->priv_data; + uavs3d_io_frm_t *frm_dec = &h->dec_frame; + struct uavs3d_com_seqh_t *seqh = frm_dec->seqhdr; + int ret; + + if (UAVS3D_CHECK_INVALID_RANGE(seqh->frame_rate_code, 0, 15)) { + av_log(avctx, AV_LOG_ERROR, "Invalid frame rate code: %d.\n", seqh->frame_rate_code); + seqh->frame_rate_code = 3; // default 25 fps + } else { + avctx->framerate.num = ff_avs3_frame_rate_tab[seqh->frame_rate_code].num; + avctx->framerate.den = ff_avs3_frame_rate_tab[seqh->frame_rate_code].den; + } + avctx->has_b_frames = seqh->output_reorder_delay; + avctx->pix_fmt = seqh->bit_depth_internal == 8 ? AV_PIX_FMT_YUV420P : AV_PIX_FMT_YUV420P10LE; + ret = ff_set_dimensions(avctx, seqh->horizontal_size, seqh->vertical_size); + if (ret < 0) + return ret; + h->got_seqhdr = 1; + + if (seqh->colour_description) { + if (UAVS3D_CHECK_INVALID_RANGE(seqh->colour_primaries, 0, 9) || + UAVS3D_CHECK_INVALID_RANGE(seqh->transfer_characteristics, 0, 14) || + UAVS3D_CHECK_INVALID_RANGE(seqh->matrix_coefficients, 0, 11)) { + av_log(avctx, AV_LOG_ERROR, + "Invalid colour description: primaries: %d" + "transfer characteristics: %d" + "matrix coefficients: %d.\n", + seqh->colour_primaries, + seqh->transfer_characteristics, + seqh->matrix_coefficients); + } else { + avctx->color_primaries = ff_avs3_color_primaries_tab[seqh->colour_primaries]; + avctx->color_trc = ff_avs3_color_transfer_tab [seqh->transfer_characteristics]; + avctx->colorspace = ff_avs3_color_matrix_tab [seqh->matrix_coefficients]; + } + } + + return 0; +} + +static int libuavs3d_decode_extradata(AVCodecContext *avctx) +{ + uavs3d_context *h = avctx->priv_data; + uint8_t *header = avctx->extradata; + int header_size = avctx->extradata_size; + uavs3d_io_frm_t *frm_dec = &h->dec_frame; + + if (avctx->extradata_size < 4) { + av_log(avctx, AV_LOG_WARNING, "Invalid extradata size %d\n", + avctx->extradata_size); + return 0; + } + + if (header[0] == 1) { + // Skip configurationVersion and sequence_header_length + header += 3; + // Also remove library_dependency_idc at the end + header_size -= 4; + } + + frm_dec->nal_type = 0; + frm_dec->pkt_pos = 0; + frm_dec->pkt_size = header_size; + frm_dec->bs = header; + frm_dec->bs_len = header_size; + frm_dec->pts = 0; + frm_dec->dts = 0; + uavs3d_decode(h->dec_handle, frm_dec); + if (frm_dec->nal_type == NAL_SEQ_HEADER) { + int ret = libuavs3d_on_seq_header(avctx); + if (ret < 0) + av_log(avctx, AV_LOG_WARNING, + "Process sequence header failed, %s\n", av_err2str(ret)); + } else { + av_log(avctx, AV_LOG_WARNING, + "Missing sequence header in extradata\n"); + } + + return 0; +} + static av_cold int libuavs3d_init(AVCodecContext *avctx) { uavs3d_context *h = avctx->priv_data; @@ -120,6 +205,9 @@ static av_cold int libuavs3d_init(AVCodecContext *avctx) return AVERROR(ENOMEM); } + if (avctx->extradata) + return libuavs3d_decode_extradata(avctx); + return 0; } @@ -146,7 +234,6 @@ static void libuavs3d_flush(AVCodecContext * avctx) } } -#define UAVS3D_CHECK_INVALID_RANGE(v, l, r) ((v)<(l)||(v)>(r)) static int libuavs3d_decode_frame(AVCodecContext *avctx, AVFrame *frm, int *got_frame, AVPacket *avpkt) { @@ -207,38 +294,9 @@ FF_ENABLE_DEPRECATION_WARNINGS buf_ptr += bs_len; if (frm_dec->nal_type == NAL_SEQ_HEADER) { - struct uavs3d_com_seqh_t *seqh = frm_dec->seqhdr; - if (UAVS3D_CHECK_INVALID_RANGE(seqh->frame_rate_code, 0, 15)) { - av_log(avctx, AV_LOG_ERROR, "Invalid frame rate code: %d.\n", seqh->frame_rate_code); - seqh->frame_rate_code = 3; // default 25 fps - } else { - avctx->framerate.num = ff_avs3_frame_rate_tab[seqh->frame_rate_code].num; - avctx->framerate.den = ff_avs3_frame_rate_tab[seqh->frame_rate_code].den; - } - avctx->has_b_frames = seqh->output_reorder_delay; - avctx->pix_fmt = seqh->bit_depth_internal == 8 ? AV_PIX_FMT_YUV420P : AV_PIX_FMT_YUV420P10LE; - ret = ff_set_dimensions(avctx, seqh->horizontal_size, seqh->vertical_size); + ret = libuavs3d_on_seq_header(avctx); if (ret < 0) return ret; - h->got_seqhdr = 1; - - if (seqh->colour_description) { - if (UAVS3D_CHECK_INVALID_RANGE(seqh->colour_primaries, 0, 9) || - UAVS3D_CHECK_INVALID_RANGE(seqh->transfer_characteristics, 0, 14) || - UAVS3D_CHECK_INVALID_RANGE(seqh->matrix_coefficients, 0, 11)) { - av_log(avctx, AV_LOG_ERROR, - "Invalid colour description: primaries: %d" - "transfer characteristics: %d" - "matrix coefficients: %d.\n", - seqh->colour_primaries, - seqh->transfer_characteristics, - seqh->matrix_coefficients); - } else { - avctx->color_primaries = ff_avs3_color_primaries_tab[seqh->colour_primaries]; - avctx->color_trc = ff_avs3_color_transfer_tab [seqh->transfer_characteristics]; - avctx->colorspace = ff_avs3_color_matrix_tab [seqh->matrix_coefficients]; - } - } } if (frm_dec->got_pic) { break; -- 2.46.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".