* [FFmpeg-devel] [PATCH v24 6/9] avformat/mov_muxer: Extended MOV muxer to handle EVC video content [not found] <CGME20230612123038eucas1p1c481a42fcbf3ae39b3dd756dcedc64e6@eucas1p1.samsung.com> @ 2023-06-12 12:30 ` Dawid Kozinski 2023-06-14 0:23 ` Michael Niedermayer 2023-06-19 2:27 ` Wang Bin 0 siblings, 2 replies; 10+ messages in thread From: Dawid Kozinski @ 2023-06-12 12:30 UTC (permalink / raw) To: d.frankiewic, ffmpeg-devel; +Cc: Dawid Kozinski - Changes in mov_write_video_tag function to handle EVC elementary stream - Provided structure EVCDecoderConfigurationRecord that specifies the decoder configuration information for ISO/IEC 23094-1 video content Signed-off-by: Dawid Kozinski <d.kozinski@samsung.com> --- libavformat/Makefile | 2 +- libavformat/evc.c | 422 ++++++++++++++++++++++++++++++++++++++++ libavformat/evc.h | 44 +++++ libavformat/isom_tags.c | 2 + libavformat/movenc.c | 33 ++++ 5 files changed, 502 insertions(+), 1 deletion(-) create mode 100644 libavformat/evc.c create mode 100644 libavformat/evc.h diff --git a/libavformat/Makefile b/libavformat/Makefile index 6e4231fda2..d3503196e3 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -364,7 +364,7 @@ OBJS-$(CONFIG_MOV_DEMUXER) += mov.o mov_chan.o mov_esds.o \ OBJS-$(CONFIG_MOV_MUXER) += movenc.o av1.o avc.o hevc.o vpcc.o \ movenchint.o mov_chan.o rtp.o \ movenccenc.o movenc_ttml.o rawutils.o \ - dovi_isom.o + dovi_isom.o evc.o OBJS-$(CONFIG_MP2_MUXER) += rawenc.o OBJS-$(CONFIG_MP3_DEMUXER) += mp3dec.o replaygain.o OBJS-$(CONFIG_MP3_MUXER) += mp3enc.o rawenc.o id3v2enc.o diff --git a/libavformat/evc.c b/libavformat/evc.c new file mode 100644 index 0000000000..431cb107e3 --- /dev/null +++ b/libavformat/evc.c @@ -0,0 +1,422 @@ +/* + * EVC helper functions for muxers + * Copyright (c) 2022 Dawid Kozinski <d.kozinski@samsung.com> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/intreadwrite.h" +#include "libavcodec/get_bits.h" +#include "libavcodec/golomb.h" +#include "libavcodec/evc.h" +#include "libavcodec/evc_parse.h" +#include "avformat.h" +#include "avio.h" +#include "evc.h" +#include "avio_internal.h" + +// The length field that indicates the length in bytes of the following NAL unit is configured to be of 4 bytes +#define EVC_NALU_LENGTH_PREFIX_SIZE (4) /* byte */ +#define EVC_NALU_HEADER_SIZE (2) /* byte */ + +// @see ISO/IEC 14496-15:2021 Coding of audio-visual objects - Part 15: section 12.3.3.1 +enum { + SPS_INDEX, + PPS_INDEX, + APS_INDEX, + SEI_INDEX, + NB_ARRAYS +}; + +// The sturcture reflects SPS RBSP(raw byte sequence payload) layout +// @see ISO_IEC_23094-1 section 7.3.2.1 +// +// The following descriptors specify the parsing process of each element +// u(n) - unsigned integer using n bits +// ue(v) - unsigned integer 0-th order Exp_Golomb-coded syntax element with the left bit first +typedef struct EVCSPS { + int sps_seq_parameter_set_id; // ue(v) + int profile_idc; // u(8) + int level_idc; // u(8) + int toolset_idc_h; // u(32) + int toolset_idc_l; // u(32) + int chroma_format_idc; // ue(v) + int pic_width_in_luma_samples; // ue(v) + int pic_height_in_luma_samples; // ue(v) + int bit_depth_luma_minus8; // ue(v) + int bit_depth_chroma_minus8; // ue(v) + + // @note + // Currently the structure does not reflect the entire SPS RBSP layout. + // It contains only the fields that are necessary to read from the NAL unit all the values + // necessary for the correct initialization of EVCDecoderConfigurationRecord + + // @note + // If necessary, add the missing fields to the structure to reflect + // the contents of the entire NAL unit of the SPS type + +} EVCSPS; + +// @see ISO/IEC 14496-15:2021 Coding of audio-visual objects - Part 15: section 12.3.3.3 +typedef struct EVCNALUnitArray { + uint8_t array_completeness; // when equal to 1 indicates that all NAL units of the given type are in the following array + uint8_t NAL_unit_type; // indicates the type of the NAL units in the following array + uint16_t numNalus; // indicates the number of NAL units of the indicated type + uint16_t *nalUnitLength; // indicates the length in bytes of the NAL unit + uint8_t **nalUnit; // contains an SPS, PPS, APS or a SEI NAL unit, as specified in ISO/IEC 23094-1 +} EVCNALUnitArray; + +/** + * @brief Specifies the decoder configuration information for ISO/IEC 23094-1 video content. + * @see ISO/IEC 14496-15:2021 Coding of audio-visual objects - Part 15: section 12.3.3.2 + * Carriage of network abstraction layer (NAL) unit structured video in the ISO base media file format + */ +typedef struct EVCDecoderConfigurationRecord { + uint8_t configurationVersion; // 8 bits + uint8_t profile_idc; // 8 bits + uint8_t level_idc; // 8 bits + uint32_t toolset_idc_h; // 32 bits + uint32_t toolset_idc_l; // 32 bits + uint8_t chroma_format_idc; // 2 bits + uint8_t bit_depth_luma_minus8; // 3 bits + uint8_t bit_depth_chroma_minus8; // 3 bits + uint16_t pic_width_in_luma_samples; // 16 bits + uint16_t pic_height_in_luma_samples; // 16 bits + uint8_t reserved; // 6 bits '000000'b + uint8_t lengthSizeMinusOne; // 2 bits + uint8_t num_of_arrays; // 8 bits + EVCNALUnitArray arrays[NB_ARRAYS]; +} EVCDecoderConfigurationRecord; + +typedef struct NALU { + int offset; + uint32_t size; +} NALU; + +typedef struct NALUList { + NALU *nalus; + unsigned nalus_array_size; + unsigned nb_nalus; ///< valid entries in nalus +} NALUList; + +// @see ISO_IEC_23094-1 (7.3.2.1 SPS RBSP syntax) +static int evcc_parse_sps(const uint8_t *bs, int bs_size, EVCDecoderConfigurationRecord *evcc) +{ + GetBitContext gb; + int sps_seq_parameter_set_id; + EVCSPS sps; + + if (init_get_bits8(&gb, bs, bs_size) < 0) + return 0; + + sps.sps_seq_parameter_set_id = get_ue_golomb(&gb); + + if (sps_seq_parameter_set_id >= EVC_MAX_SPS_COUNT) + return 0; + + // the Baseline profile is indicated by profile_idc eqal to 0 + // the Main profile is indicated by profile_idc eqal to 1 + sps.profile_idc = get_bits(&gb, 8); + + sps.level_idc = get_bits(&gb, 8); + + sps.toolset_idc_h = get_bits(&gb, 32); + sps.toolset_idc_l = get_bits(&gb, 32); + + // 0 - monochrome + // 1 - 4:2:0 + // 2 - 4:2:2 + // 3 - 4:4:4 + sps.chroma_format_idc = get_ue_golomb(&gb); + + sps.pic_width_in_luma_samples = get_ue_golomb(&gb); + sps.pic_height_in_luma_samples = get_ue_golomb(&gb); + + sps.bit_depth_luma_minus8 = get_ue_golomb(&gb); + sps.bit_depth_chroma_minus8 = get_ue_golomb(&gb); + + evcc->profile_idc = sps.profile_idc; + evcc->level_idc = sps.level_idc; + evcc->toolset_idc_h = sps.toolset_idc_h; + evcc->toolset_idc_l = sps.toolset_idc_l; + evcc->chroma_format_idc = sps.chroma_format_idc; + evcc->bit_depth_luma_minus8 = sps.bit_depth_luma_minus8; + evcc->bit_depth_chroma_minus8 = sps.bit_depth_chroma_minus8; + evcc->pic_width_in_luma_samples = sps.pic_width_in_luma_samples; + evcc->pic_height_in_luma_samples = sps.pic_height_in_luma_samples; + + return 0; +} + +// @see ISO/IEC 14496-15:2021 Coding of audio-visual objects - Part 15: section 12.3.3.3 +static int evcc_array_add_nal_unit(const uint8_t *nal_buf, uint32_t nal_size, + uint8_t nal_type, int ps_array_completeness, + EVCNALUnitArray *array) +{ + int ret; + uint16_t numNalus = array->numNalus; + + ret = av_reallocp_array(&array->nalUnit, numNalus + 1, sizeof(uint8_t *)); + if (ret < 0) + return ret; + + ret = av_reallocp_array(&array->nalUnitLength, numNalus + 1, sizeof(uint16_t)); + if (ret < 0) + return ret; + + array->nalUnit [numNalus] = (uint8_t *)nal_buf; + array->nalUnitLength[numNalus] = nal_size; + array->NAL_unit_type = nal_type; + array->numNalus++; + + /* + * When the sample entry name is 'evc1', the default and mandatory value of + * array_completeness is 1 for arrays of all types of parameter sets, and 0 + * for all other arrays. + */ + if (nal_type == EVC_SPS_NUT || nal_type == EVC_PPS_NUT || nal_type == EVC_APS_NUT) + array->array_completeness = ps_array_completeness; + + return 0; +} + +static void evcc_init(EVCDecoderConfigurationRecord *evcc) +{ + memset(evcc, 0, sizeof(EVCDecoderConfigurationRecord)); + evcc->configurationVersion = 1; + evcc->lengthSizeMinusOne = 3; // 4 bytes +} + +static void evcc_close(EVCDecoderConfigurationRecord *evcc) +{ + for (unsigned i = 0; i < FF_ARRAY_ELEMS(evcc->arrays); i++) { + EVCNALUnitArray *const array = &evcc->arrays[i]; + array->numNalus = 0; + av_freep(&array->nalUnit); + av_freep(&array->nalUnitLength); + } +} + +static int evcc_write(AVIOContext *pb, EVCDecoderConfigurationRecord *evcc) +{ + uint16_t sps_count; + + av_log(NULL, AV_LOG_TRACE, "configurationVersion: %"PRIu8"\n", + evcc->configurationVersion); + av_log(NULL, AV_LOG_TRACE, "profile_idc: %"PRIu8"\n", + evcc->profile_idc); + av_log(NULL, AV_LOG_TRACE, "level_idc: %"PRIu8"\n", + evcc->level_idc); + av_log(NULL, AV_LOG_TRACE, "toolset_idc_h: %"PRIu32"\n", + evcc->toolset_idc_h); + av_log(NULL, AV_LOG_TRACE, "toolset_idc_l: %"PRIu32"\n", + evcc->toolset_idc_l); + av_log(NULL, AV_LOG_TRACE, "chroma_format_idc: %"PRIu8"\n", + evcc->chroma_format_idc); + av_log(NULL, AV_LOG_TRACE, "bit_depth_luma_minus8: %"PRIu8"\n", + evcc->bit_depth_luma_minus8); + av_log(NULL, AV_LOG_TRACE, "bit_depth_chroma_minus8: %"PRIu8"\n", + evcc->bit_depth_chroma_minus8); + av_log(NULL, AV_LOG_TRACE, "pic_width_in_luma_samples: %"PRIu16"\n", + evcc->pic_width_in_luma_samples); + av_log(NULL, AV_LOG_TRACE, "pic_height_in_luma_samples: %"PRIu16"\n", + evcc->pic_height_in_luma_samples); + av_log(NULL, AV_LOG_TRACE, "lengthSizeMinusOne: %"PRIu8"\n", + evcc->lengthSizeMinusOne); + av_log(NULL, AV_LOG_TRACE, "num_of_arrays: %"PRIu8"\n", + evcc->num_of_arrays); + for (unsigned i = 0; i < FF_ARRAY_ELEMS(evcc->arrays); i++) { + const EVCNALUnitArray *const array = &evcc->arrays[i]; + + if(array->numNalus == 0) + continue; + + av_log(NULL, AV_LOG_TRACE, "array_completeness[%"PRIu8"]: %"PRIu8"\n", + i, array->array_completeness); + av_log(NULL, AV_LOG_TRACE, "NAL_unit_type[%"PRIu8"]: %"PRIu8"\n", + i, array->NAL_unit_type); + av_log(NULL, AV_LOG_TRACE, "numNalus[%"PRIu8"]: %"PRIu16"\n", + i, array->numNalus); + for ( unsigned j = 0; j < array->numNalus; j++) + av_log(NULL, AV_LOG_TRACE, + "nalUnitLength[%"PRIu8"][%"PRIu16"]: %"PRIu16"\n", + i, j, array->nalUnitLength[j]); + } + + /* + * We need at least one SPS. + */ + sps_count = evcc->arrays[SPS_INDEX].numNalus; + if (!sps_count || sps_count > EVC_MAX_SPS_COUNT) + return AVERROR_INVALIDDATA; + + if (!sps_count || sps_count > EVC_MAX_SPS_COUNT) + return AVERROR_INVALIDDATA; + + /* unsigned int(8) configurationVersion = 1; */ + avio_w8(pb, evcc->configurationVersion); + + /* unsigned int(8) profile_idc */ + avio_w8(pb, evcc->profile_idc); + + /* unsigned int(8) profile_idc */ + avio_w8(pb, evcc->level_idc); + + /* unsigned int(32) toolset_idc_h */ + avio_wb32(pb, evcc->toolset_idc_h); + + /* unsigned int(32) toolset_idc_l */ + avio_wb32(pb, evcc->toolset_idc_l); + + /* + * unsigned int(2) chroma_format_idc; + * unsigned int(3) bit_depth_luma_minus8; + * unsigned int(3) bit_depth_chroma_minus8; + */ + avio_w8(pb, evcc->chroma_format_idc << 6 | + evcc->bit_depth_luma_minus8 << 3 | + evcc->bit_depth_chroma_minus8); + + /* unsigned int(16) pic_width_in_luma_samples; */ + avio_wb16(pb, evcc->pic_width_in_luma_samples); + + /* unsigned int(16) pic_width_in_luma_samples; */ + avio_wb16(pb, evcc->pic_height_in_luma_samples); + + /* + * bit(6) reserved = '111111'b; + * unsigned int(2) chromaFormat; + */ + avio_w8(pb, evcc->lengthSizeMinusOne | 0xfc); + + /* unsigned int(8) numOfArrays; */ + avio_w8(pb, evcc->num_of_arrays); + + for (unsigned i = 0; i < FF_ARRAY_ELEMS(evcc->arrays); i++) { + const EVCNALUnitArray *const array = &evcc->arrays[i]; + + if (!array->numNalus) + continue; + + /* + * bit(1) array_completeness; + * unsigned int(1) reserved = 0; + * unsigned int(6) NAL_unit_type; + */ + avio_w8(pb, array->array_completeness << 7 | + array->NAL_unit_type & 0x3f); + + /* unsigned int(16) numNalus; */ + avio_wb16(pb, array->numNalus); + + for (unsigned j = 0; j < array->numNalus; j++) { + /* unsigned int(16) nalUnitLength; */ + avio_wb16(pb, array->nalUnitLength[j]); + + /* bit(8*nalUnitLength) nalUnit; */ + avio_write(pb, array->nalUnit[j], + array->nalUnitLength[j]); + } + } + + return 0; +} + +int ff_isom_write_evcc(AVIOContext *pb, const uint8_t *data, + int size, int ps_array_completeness) +{ + EVCDecoderConfigurationRecord evcc; + int nalu_type; + size_t nalu_size; + int bytes_to_read = size; + unsigned array_index; + + int ret = 0; + + if (size < 8) { + /* We can't write a valid evcC from the provided data */ + return AVERROR_INVALIDDATA; + } else if (*data == 1) { + /* Data is already evcC-formatted */ + avio_write(pb, data, size); + return 0; + } + + evcc_init(&evcc); + + while (bytes_to_read > EVC_NALU_LENGTH_PREFIX_SIZE) { + nalu_size = ff_evc_read_nal_unit_length(data, EVC_NALU_LENGTH_PREFIX_SIZE, pb); + if (nalu_size == 0) break; + + data += EVC_NALU_LENGTH_PREFIX_SIZE; + bytes_to_read -= EVC_NALU_LENGTH_PREFIX_SIZE; + + if (bytes_to_read < nalu_size) break; + + nalu_type = ff_evc_get_nalu_type(data, bytes_to_read, pb); + + // @see ISO/IEC 14496-15:2021 Coding of audio-visual objects - Part 15: section 12.3.3.3 + // NAL_unit_type indicates the type of the NAL units in the following array (which shall be all of that type); + // - it takes a value as defined in ISO/IEC 23094-1; + // - it is restricted to take one of the values indicating a SPS, PPS, APS, or SEI NAL unit. + switch (nalu_type) { + case EVC_SPS_NUT: + array_index = SPS_INDEX; + break; + case EVC_PPS_NUT: + array_index = PPS_INDEX; + break; + case EVC_APS_NUT: + array_index = APS_INDEX; + break; + case EVC_SEI_NUT: + array_index = SEI_INDEX; + break; + default: + array_index = -1; + break; + } + + if( (array_index == SPS_INDEX) || + (array_index == PPS_INDEX) || + (array_index == APS_INDEX) || + (array_index == SEI_INDEX) ) { + + ret = evcc_array_add_nal_unit(data, nalu_size, nalu_type, ps_array_completeness, &(evcc.arrays[array_index])); + + if (ret < 0) + goto end; + if (evcc.arrays[array_index].numNalus == 1) + evcc.num_of_arrays++; + + if(nalu_type == EVC_SPS_NUT) { + ret = evcc_parse_sps(data, nalu_size, &evcc); + if (ret < 0) + goto end; + } + } + + data += nalu_size; + bytes_to_read -= nalu_size; + } + + ret = evcc_write(pb, &evcc); + +end: + evcc_close(&evcc); + return ret; +} diff --git a/libavformat/evc.h b/libavformat/evc.h new file mode 100644 index 0000000000..db56275fd8 --- /dev/null +++ b/libavformat/evc.h @@ -0,0 +1,44 @@ +/* + * EVC helper functions for muxers + * Copyright (c) 2022 Dawid Kozinski <d.kozinski@samsung.com> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVFORMAT_EVC_H +#define AVFORMAT_EVC_H + +#include <stdint.h> +#include "libavutil/rational.h" +#include "avio.h" + + + +/** + * Writes EVC sample metadata to the provided AVIOContext. + * + * @param pb pointer to the AVIOContext where the evc sample metadata shall be written + * @param buf input data buffer + * @param size size in bytes of the input data buffer + * @param ps_array_completeness @see ISO/IEC 14496-15:2021 Coding of audio-visual objects - Part 15: section 12.3.3.3 + * + * @return 0 in case of success, a negative error code in case of failure + */ +int ff_isom_write_evcc(AVIOContext *pb, const uint8_t *data, + int size, int ps_array_completeness); + +#endif // AVFORMAT_EVC_H diff --git a/libavformat/isom_tags.c b/libavformat/isom_tags.c index 86c7272525..2a29823b2e 100644 --- a/libavformat/isom_tags.c +++ b/libavformat/isom_tags.c @@ -147,6 +147,8 @@ const AVCodecTag ff_codec_movvideo_tags[] = { { AV_CODEC_ID_H264, MKTAG('d', 'v', 'a', '1') }, /* AVC-based Dolby Vision derived from avc1 */ { AV_CODEC_ID_H264, MKTAG('d', 'v', 'a', 'v') }, /* AVC-based Dolby Vision derived from avc3 */ + { AV_CODEC_ID_EVC, MKTAG('e', 'v', 'c', '1') }, /* EVC/MPEG-5 */ + { AV_CODEC_ID_VP8, MKTAG('v', 'p', '0', '8') }, /* VP8 */ { AV_CODEC_ID_VP9, MKTAG('v', 'p', '0', '9') }, /* VP9 */ { AV_CODEC_ID_AV1, MKTAG('a', 'v', '0', '1') }, /* AV1 */ diff --git a/libavformat/movenc.c b/libavformat/movenc.c index a9c8e104f0..f1cc80b1b3 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -35,6 +35,7 @@ #include "isom.h" #include "av1.h" #include "avc.h" +#include "evc.h" #include "libavcodec/ac3_parser_internal.h" #include "libavcodec/dnxhddata.h" #include "libavcodec/flac.h" @@ -1455,6 +1456,21 @@ static int mov_write_hvcc_tag(AVIOContext *pb, MOVTrack *track) return update_size(pb, pos); } +static int mov_write_evcc_tag(AVIOContext *pb, MOVTrack *track) +{ + int64_t pos = avio_tell(pb); + + avio_wb32(pb, 0); + ffio_wfourcc(pb, "evcC"); + + if (track->tag == MKTAG('e','v','c','1')) + ff_isom_write_evcc(pb, track->vos_data, track->vos_len, 1); + else + ff_isom_write_evcc(pb, track->vos_data, track->vos_len, 0); + + return update_size(pb, pos); +} + /* also used by all avid codecs (dv, imx, meridien) and their variants */ static int mov_write_avid_tag(AVIOContext *pb, MOVTrack *track) { @@ -1704,6 +1720,16 @@ static int mov_get_h264_codec_tag(AVFormatContext *s, MOVTrack *track) return tag; } +static int mov_get_evc_codec_tag(AVFormatContext *s, MOVTrack *track) +{ + int tag = track->par->codec_tag; + + if (!tag) + tag = MKTAG('e', 'v', 'c', '1'); + + return tag; +} + static const struct { enum AVPixelFormat pix_fmt; uint32_t tag; @@ -1785,6 +1811,8 @@ static unsigned int mov_get_codec_tag(AVFormatContext *s, MOVTrack *track) tag = mov_get_mpeg2_xdcam_codec_tag(s, track); else if (track->par->codec_id == AV_CODEC_ID_H264) tag = mov_get_h264_codec_tag(s, track); + else if (track->par->codec_id == AV_CODEC_ID_EVC) + tag = mov_get_evc_codec_tag(s, track); else if (track->par->codec_id == AV_CODEC_ID_DNXHD) tag = mov_get_dnxhd_codec_tag(s, track); else if (track->par->codec_type == AVMEDIA_TYPE_VIDEO) { @@ -2352,6 +2380,9 @@ static int mov_write_video_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContex mov_write_avcc_tag(pb, track); if (track->mode == MODE_IPOD) mov_write_uuid_tag_ipod(pb); + } + else if (track->par->codec_id ==AV_CODEC_ID_EVC) { + mov_write_evcc_tag(pb, track); } else if (track->par->codec_id == AV_CODEC_ID_VP9) { mov_write_vpcc_tag(mov->fc, pb, track); } else if (track->par->codec_id == AV_CODEC_ID_AV1) { @@ -6126,6 +6157,7 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt) par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_HEVC || par->codec_id == AV_CODEC_ID_VP9 || + par->codec_id == AV_CODEC_ID_EVC || par->codec_id == AV_CODEC_ID_TRUEHD) && !trk->vos_len && !TAG_IS_AVCI(trk->tag)) { /* copy frame to create needed atoms */ @@ -7785,6 +7817,7 @@ static const AVCodecTag codec_mp4_tags[] = { { AV_CODEC_ID_H264, MKTAG('a', 'v', 'c', '3') }, { AV_CODEC_ID_HEVC, MKTAG('h', 'e', 'v', '1') }, { AV_CODEC_ID_HEVC, MKTAG('h', 'v', 'c', '1') }, + { AV_CODEC_ID_EVC, MKTAG('e', 'v', 'c', '1') }, { AV_CODEC_ID_MPEG2VIDEO, MKTAG('m', 'p', '4', 'v') }, { AV_CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', '4', 'v') }, { AV_CODEC_ID_MJPEG, MKTAG('m', 'p', '4', 'v') }, -- 2.25.1 _______________________________________________ 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". ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [FFmpeg-devel] [PATCH v24 6/9] avformat/mov_muxer: Extended MOV muxer to handle EVC video content 2023-06-12 12:30 ` [FFmpeg-devel] [PATCH v24 6/9] avformat/mov_muxer: Extended MOV muxer to handle EVC video content Dawid Kozinski @ 2023-06-14 0:23 ` Michael Niedermayer 2023-06-14 1:00 ` James Almer ` (2 more replies) 2023-06-19 2:27 ` Wang Bin 1 sibling, 3 replies; 10+ messages in thread From: Michael Niedermayer @ 2023-06-14 0:23 UTC (permalink / raw) To: FFmpeg development discussions and patches [-- Attachment #1.1: Type: text/plain, Size: 3200 bytes --] On Mon, Jun 12, 2023 at 02:30:27PM +0200, Dawid Kozinski wrote: > - Changes in mov_write_video_tag function to handle EVC elementary stream > - Provided structure EVCDecoderConfigurationRecord that specifies the decoder configuration information for ISO/IEC 23094-1 video content > > Signed-off-by: Dawid Kozinski <d.kozinski@samsung.com> > --- > libavformat/Makefile | 2 +- > libavformat/evc.c | 422 ++++++++++++++++++++++++++++++++++++++++ > libavformat/evc.h | 44 +++++ > libavformat/isom_tags.c | 2 + > libavformat/movenc.c | 33 ++++ > 5 files changed, 502 insertions(+), 1 deletion(-) > create mode 100644 libavformat/evc.c > create mode 100644 libavformat/evc.h > > diff --git a/libavformat/Makefile b/libavformat/Makefile > index 6e4231fda2..d3503196e3 100644 > --- a/libavformat/Makefile > +++ b/libavformat/Makefile > @@ -364,7 +364,7 @@ OBJS-$(CONFIG_MOV_DEMUXER) += mov.o mov_chan.o mov_esds.o \ > OBJS-$(CONFIG_MOV_MUXER) += movenc.o av1.o avc.o hevc.o vpcc.o \ > movenchint.o mov_chan.o rtp.o \ > movenccenc.o movenc_ttml.o rawutils.o \ > - dovi_isom.o > + dovi_isom.o evc.o > OBJS-$(CONFIG_MP2_MUXER) += rawenc.o > OBJS-$(CONFIG_MP3_DEMUXER) += mp3dec.o replaygain.o > OBJS-$(CONFIG_MP3_MUXER) += mp3enc.o rawenc.o id3v2enc.o > diff --git a/libavformat/evc.c b/libavformat/evc.c > new file mode 100644 > index 0000000000..431cb107e3 > --- /dev/null > +++ b/libavformat/evc.c > @@ -0,0 +1,422 @@ > +/* > + * EVC helper functions for muxers > + * Copyright (c) 2022 Dawid Kozinski <d.kozinski@samsung.com> > + * > + * This file is part of FFmpeg. > + * > + * FFmpeg is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2.1 of the License, or (at your option) any later version. > + * > + * FFmpeg is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with FFmpeg; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA > + */ [...] > + nalu_type = ff_evc_get_nalu_type(data, bytes_to_read, pb); functions shared between libavcodec and libavformat need an av*/avpriv* prefix otherwise linking will fail with shared libs as ff* isnt exported [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Many that live deserve death. And some that die deserve life. Can you give it to them? Then do not be too eager to deal out death in judgement. For even the very wise cannot see all ends. -- Gandalf [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 195 bytes --] [-- Attachment #2: Type: text/plain, Size: 251 bytes --] _______________________________________________ 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". ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [FFmpeg-devel] [PATCH v24 6/9] avformat/mov_muxer: Extended MOV muxer to handle EVC video content 2023-06-14 0:23 ` Michael Niedermayer @ 2023-06-14 1:00 ` James Almer 2023-06-15 7:20 ` Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics 2023-06-15 12:06 ` Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics 2023-06-15 9:41 ` Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics 2023-06-15 12:06 ` Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics 2 siblings, 2 replies; 10+ messages in thread From: James Almer @ 2023-06-14 1:00 UTC (permalink / raw) To: ffmpeg-devel On 6/13/2023 9:23 PM, Michael Niedermayer wrote: > On Mon, Jun 12, 2023 at 02:30:27PM +0200, Dawid Kozinski wrote: >> - Changes in mov_write_video_tag function to handle EVC elementary stream >> - Provided structure EVCDecoderConfigurationRecord that specifies the decoder configuration information for ISO/IEC 23094-1 video content >> >> Signed-off-by: Dawid Kozinski <d.kozinski@samsung.com> >> --- >> libavformat/Makefile | 2 +- >> libavformat/evc.c | 422 ++++++++++++++++++++++++++++++++++++++++ >> libavformat/evc.h | 44 +++++ >> libavformat/isom_tags.c | 2 + >> libavformat/movenc.c | 33 ++++ >> 5 files changed, 502 insertions(+), 1 deletion(-) >> create mode 100644 libavformat/evc.c >> create mode 100644 libavformat/evc.h >> >> diff --git a/libavformat/Makefile b/libavformat/Makefile >> index 6e4231fda2..d3503196e3 100644 >> --- a/libavformat/Makefile >> +++ b/libavformat/Makefile >> @@ -364,7 +364,7 @@ OBJS-$(CONFIG_MOV_DEMUXER) += mov.o mov_chan.o mov_esds.o \ >> OBJS-$(CONFIG_MOV_MUXER) += movenc.o av1.o avc.o hevc.o vpcc.o \ >> movenchint.o mov_chan.o rtp.o \ >> movenccenc.o movenc_ttml.o rawutils.o \ >> - dovi_isom.o >> + dovi_isom.o evc.o >> OBJS-$(CONFIG_MP2_MUXER) += rawenc.o >> OBJS-$(CONFIG_MP3_DEMUXER) += mp3dec.o replaygain.o >> OBJS-$(CONFIG_MP3_MUXER) += mp3enc.o rawenc.o id3v2enc.o >> diff --git a/libavformat/evc.c b/libavformat/evc.c >> new file mode 100644 >> index 0000000000..431cb107e3 >> --- /dev/null >> +++ b/libavformat/evc.c >> @@ -0,0 +1,422 @@ >> +/* >> + * EVC helper functions for muxers >> + * Copyright (c) 2022 Dawid Kozinski <d.kozinski@samsung.com> >> + * >> + * This file is part of FFmpeg. >> + * >> + * FFmpeg is free software; you can redistribute it and/or >> + * modify it under the terms of the GNU Lesser General Public >> + * License as published by the Free Software Foundation; either >> + * version 2.1 of the License, or (at your option) any later version. >> + * >> + * FFmpeg is distributed in the hope that it will be useful, >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >> + * Lesser General Public License for more details. >> + * >> + * You should have received a copy of the GNU Lesser General Public >> + * License along with FFmpeg; if not, write to the Free Software >> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA >> + */ > > [...] > >> + nalu_type = ff_evc_get_nalu_type(data, bytes_to_read, pb); > > functions shared between libavcodec and libavformat need an av*/avpriv* prefix > otherwise linking will fail with shared libs as ff* isnt exported It's small enough that it can go in the header instead. That way we save one unnecessary exported symbol. Same with ff_evc_read_nal_unit_length(). _______________________________________________ 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". ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [FFmpeg-devel] [PATCH v24 6/9] avformat/mov_muxer: Extended MOV muxer to handle EVC video content 2023-06-14 1:00 ` James Almer @ 2023-06-15 7:20 ` Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics 2023-06-15 12:06 ` Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics 1 sibling, 0 replies; 10+ messages in thread From: Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics @ 2023-06-15 7:20 UTC (permalink / raw) To: 'FFmpeg development discussions and patches' > -----Original Message----- > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of James > Almer > Sent: środa, 14 czerwca 2023 03:00 > To: ffmpeg-devel@ffmpeg.org > Subject: Re: [FFmpeg-devel] [PATCH v24 6/9] avformat/mov_muxer: Extended > MOV muxer to handle EVC video content > > On 6/13/2023 9:23 PM, Michael Niedermayer wrote: > > On Mon, Jun 12, 2023 at 02:30:27PM +0200, Dawid Kozinski wrote: > >> - Changes in mov_write_video_tag function to handle EVC elementary > >> stream > >> - Provided structure EVCDecoderConfigurationRecord that specifies the > >> decoder configuration information for ISO/IEC 23094-1 video content > >> > >> Signed-off-by: Dawid Kozinski <d.kozinski@samsung.com> > >> --- > >> libavformat/Makefile | 2 +- > >> libavformat/evc.c | 422 > ++++++++++++++++++++++++++++++++++++++++ > >> libavformat/evc.h | 44 +++++ > >> libavformat/isom_tags.c | 2 + > >> libavformat/movenc.c | 33 ++++ > >> 5 files changed, 502 insertions(+), 1 deletion(-) > >> create mode 100644 libavformat/evc.c > >> create mode 100644 libavformat/evc.h > >> > >> diff --git a/libavformat/Makefile b/libavformat/Makefile index > >> 6e4231fda2..d3503196e3 100644 > >> --- a/libavformat/Makefile > >> +++ b/libavformat/Makefile > >> @@ -364,7 +364,7 @@ OBJS-$(CONFIG_MOV_DEMUXER) += mov.o > mov_chan.o mov_esds.o \ > >> OBJS-$(CONFIG_MOV_MUXER) += movenc.o av1.o avc.o hevc.o > vpcc.o \ > >> movenchint.o mov_chan.o rtp.o \ > >> movenccenc.o movenc_ttml.o rawutils.o \ > >> - dovi_isom.o > >> + dovi_isom.o evc.o > >> OBJS-$(CONFIG_MP2_MUXER) += rawenc.o > >> OBJS-$(CONFIG_MP3_DEMUXER) += mp3dec.o replaygain.o > >> OBJS-$(CONFIG_MP3_MUXER) += mp3enc.o rawenc.o id3v2enc.o > >> diff --git a/libavformat/evc.c b/libavformat/evc.c new file mode > >> 100644 index 0000000000..431cb107e3 > >> --- /dev/null > >> +++ b/libavformat/evc.c > >> @@ -0,0 +1,422 @@ > >> +/* > >> + * EVC helper functions for muxers > >> + * Copyright (c) 2022 Dawid Kozinski <d.kozinski@samsung.com> > >> + * > >> + * This file is part of FFmpeg. > >> + * > >> + * FFmpeg is free software; you can redistribute it and/or > >> + * modify it under the terms of the GNU Lesser General Public > >> + * License as published by the Free Software Foundation; either > >> + * version 2.1 of the License, or (at your option) any later version. > >> + * > >> + * FFmpeg is distributed in the hope that it will be useful, > >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of > >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > GNU > >> + * Lesser General Public License for more details. > >> + * > >> + * You should have received a copy of the GNU Lesser General Public > >> + * License along with FFmpeg; if not, write to the Free Software > >> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA > >> +02110-1301 USA */ > > > > [...] > > > >> + nalu_type = ff_evc_get_nalu_type(data, bytes_to_read, pb); > > > > functions shared between libavcodec and libavformat need an > > av*/avpriv* prefix otherwise linking will fail with shared libs as ff* > > isnt exported > > It's small enough that it can go in the header instead. That way we save one > unnecessary exported symbol. Same with ff_evc_read_nal_unit_length(). Thank you for your code review. I've just pushed new patchset containig fixes for all the issues metnioned in this email and changes following Paul's review. Unfortunately I did that before I saw your last email and Michael Neidermayer's last email. So it seems that I still have some work to do like changing prefixes frmom ff_* to av_* for functions shared between libavcodec and libavformat, and moving int ff_evc_get_nalu_type(), ff_evc_read_nal_unit_length() implementations from evc_parse.c file to evc+parse.h. > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://protect2.fireeye.com/v1/url?k=5297bb74-33ec11fc-5296303b- > 74fe4860018a-ffe4f237f8ba290d&q=1&e=351d993e-ef97-4840-aeb8- > 4fd043541ed8&u=https%3A%2F%2Fffmpeg.org%2Fmailman%2Flistinfo%2Fffmp > eg-devel > > To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org > with subject "unsubscribe". _______________________________________________ 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". ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [FFmpeg-devel] [PATCH v24 6/9] avformat/mov_muxer: Extended MOV muxer to handle EVC video content 2023-06-14 1:00 ` James Almer 2023-06-15 7:20 ` Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics @ 2023-06-15 12:06 ` Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics 1 sibling, 0 replies; 10+ messages in thread From: Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics @ 2023-06-15 12:06 UTC (permalink / raw) To: 'FFmpeg development discussions and patches' > -----Original Message----- > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of James > Almer > Sent: środa, 14 czerwca 2023 03:00 > To: ffmpeg-devel@ffmpeg.org > Subject: Re: [FFmpeg-devel] [PATCH v24 6/9] avformat/mov_muxer: Extended > MOV muxer to handle EVC video content > > On 6/13/2023 9:23 PM, Michael Niedermayer wrote: > > On Mon, Jun 12, 2023 at 02:30:27PM +0200, Dawid Kozinski wrote: > >> - Changes in mov_write_video_tag function to handle EVC elementary > >> stream > >> - Provided structure EVCDecoderConfigurationRecord that specifies the > >> decoder configuration information for ISO/IEC 23094-1 video content > >> > >> Signed-off-by: Dawid Kozinski <d.kozinski@samsung.com> > >> --- > >> libavformat/Makefile | 2 +- > >> libavformat/evc.c | 422 > ++++++++++++++++++++++++++++++++++++++++ > >> libavformat/evc.h | 44 +++++ > >> libavformat/isom_tags.c | 2 + > >> libavformat/movenc.c | 33 ++++ > >> 5 files changed, 502 insertions(+), 1 deletion(-) > >> create mode 100644 libavformat/evc.c > >> create mode 100644 libavformat/evc.h > >> > >> diff --git a/libavformat/Makefile b/libavformat/Makefile index > >> 6e4231fda2..d3503196e3 100644 > >> --- a/libavformat/Makefile > >> +++ b/libavformat/Makefile > >> @@ -364,7 +364,7 @@ OBJS-$(CONFIG_MOV_DEMUXER) += mov.o > mov_chan.o mov_esds.o \ > >> OBJS-$(CONFIG_MOV_MUXER) += movenc.o av1.o avc.o hevc.o > vpcc.o \ > >> movenchint.o mov_chan.o rtp.o \ > >> movenccenc.o movenc_ttml.o rawutils.o \ > >> - dovi_isom.o > >> + dovi_isom.o evc.o > >> OBJS-$(CONFIG_MP2_MUXER) += rawenc.o > >> OBJS-$(CONFIG_MP3_DEMUXER) += mp3dec.o replaygain.o > >> OBJS-$(CONFIG_MP3_MUXER) += mp3enc.o rawenc.o id3v2enc.o > >> diff --git a/libavformat/evc.c b/libavformat/evc.c new file mode > >> 100644 index 0000000000..431cb107e3 > >> --- /dev/null > >> +++ b/libavformat/evc.c > >> @@ -0,0 +1,422 @@ > >> +/* > >> + * EVC helper functions for muxers > >> + * Copyright (c) 2022 Dawid Kozinski <d.kozinski@samsung.com> > >> + * > >> + * This file is part of FFmpeg. > >> + * > >> + * FFmpeg is free software; you can redistribute it and/or > >> + * modify it under the terms of the GNU Lesser General Public > >> + * License as published by the Free Software Foundation; either > >> + * version 2.1 of the License, or (at your option) any later version. > >> + * > >> + * FFmpeg is distributed in the hope that it will be useful, > >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of > >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > GNU > >> + * Lesser General Public License for more details. > >> + * > >> + * You should have received a copy of the GNU Lesser General Public > >> + * License along with FFmpeg; if not, write to the Free Software > >> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA > >> +02110-1301 USA */ > > > > [...] > > > >> + nalu_type = ff_evc_get_nalu_type(data, bytes_to_read, pb); > > > > functions shared between libavcodec and libavformat need an > > av*/avpriv* prefix otherwise linking will fail with shared libs as ff* > > isnt exported > > It's small enough that it can go in the header instead. That way we save one > unnecessary exported symbol. Same with ff_evc_read_nal_unit_length(). Done (v26) > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://protect2.fireeye.com/v1/url?k=5297bb74-33ec11fc-5296303b- > 74fe4860018a-ffe4f237f8ba290d&q=1&e=351d993e-ef97-4840-aeb8- > 4fd043541ed8&u=https%3A%2F%2Fffmpeg.org%2Fmailman%2Flistinfo%2Fffmp > eg-devel > > To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org > with subject "unsubscribe". _______________________________________________ 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". ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [FFmpeg-devel] [PATCH v24 6/9] avformat/mov_muxer: Extended MOV muxer to handle EVC video content 2023-06-14 0:23 ` Michael Niedermayer 2023-06-14 1:00 ` James Almer @ 2023-06-15 9:41 ` Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics 2023-06-15 12:06 ` Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics 2 siblings, 0 replies; 10+ messages in thread From: Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics @ 2023-06-15 9:41 UTC (permalink / raw) To: 'FFmpeg development discussions and patches' > -----Original Message----- > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of > Michael Niedermayer > Sent: środa, 14 czerwca 2023 02:23 > To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> > Subject: Re: [FFmpeg-devel] [PATCH v24 6/9] avformat/mov_muxer: Extended > MOV muxer to handle EVC video content > > On Mon, Jun 12, 2023 at 02:30:27PM +0200, Dawid Kozinski wrote: > > - Changes in mov_write_video_tag function to handle EVC elementary > > stream > > - Provided structure EVCDecoderConfigurationRecord that specifies the > > decoder configuration information for ISO/IEC 23094-1 video content > > > > Signed-off-by: Dawid Kozinski <d.kozinski@samsung.com> > > --- > > libavformat/Makefile | 2 +- > > libavformat/evc.c | 422 ++++++++++++++++++++++++++++++++++++++++ > > libavformat/evc.h | 44 +++++ > > libavformat/isom_tags.c | 2 + > > libavformat/movenc.c | 33 ++++ > > 5 files changed, 502 insertions(+), 1 deletion(-) create mode 100644 > > libavformat/evc.c create mode 100644 libavformat/evc.h > > > > diff --git a/libavformat/Makefile b/libavformat/Makefile index > > 6e4231fda2..d3503196e3 100644 > > --- a/libavformat/Makefile > > +++ b/libavformat/Makefile > > @@ -364,7 +364,7 @@ OBJS-$(CONFIG_MOV_DEMUXER) += mov.o > mov_chan.o mov_esds.o \ > > OBJS-$(CONFIG_MOV_MUXER) += movenc.o av1.o avc.o hevc.o > vpcc.o \ > > movenchint.o mov_chan.o rtp.o \ > > movenccenc.o movenc_ttml.o rawutils.o \ > > - dovi_isom.o > > + dovi_isom.o evc.o > > OBJS-$(CONFIG_MP2_MUXER) += rawenc.o > > OBJS-$(CONFIG_MP3_DEMUXER) += mp3dec.o replaygain.o > > OBJS-$(CONFIG_MP3_MUXER) += mp3enc.o rawenc.o id3v2enc.o > > diff --git a/libavformat/evc.c b/libavformat/evc.c new file mode > > 100644 index 0000000000..431cb107e3 > > --- /dev/null > > +++ b/libavformat/evc.c > > @@ -0,0 +1,422 @@ > > +/* > > + * EVC helper functions for muxers > > + * Copyright (c) 2022 Dawid Kozinski <d.kozinski@samsung.com> > > + * > > + * This file is part of FFmpeg. > > + * > > + * FFmpeg is free software; you can redistribute it and/or > > + * modify it under the terms of the GNU Lesser General Public > > + * License as published by the Free Software Foundation; either > > + * version 2.1 of the License, or (at your option) any later version. > > + * > > + * FFmpeg is distributed in the hope that it will be useful, > > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > + * Lesser General Public License for more details. > > + * > > + * You should have received a copy of the GNU Lesser General Public > > + * License along with FFmpeg; if not, write to the Free Software > > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA > > +02110-1301 USA */ > > [...] > > > + nalu_type = ff_evc_get_nalu_type(data, bytes_to_read, pb); > > functions shared between libavcodec and libavformat need an av*/avpriv* > prefix otherwise linking will fail with shared libs as ff* isnt exported > Michael, thank you for your code review. I've just pushed new patchset (v25) that fixes prefixes for functions shared between libavcoded and libavformat. > > [...] > -- > Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB > > Many that live deserve death. And some that die deserve life. Can you give it to > them? Then do not be too eager to deal out death in judgement. For even the > very wise cannot see all ends. -- Gandalf _______________________________________________ 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". ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [FFmpeg-devel] [PATCH v24 6/9] avformat/mov_muxer: Extended MOV muxer to handle EVC video content 2023-06-14 0:23 ` Michael Niedermayer 2023-06-14 1:00 ` James Almer 2023-06-15 9:41 ` Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics @ 2023-06-15 12:06 ` Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics 2 siblings, 0 replies; 10+ messages in thread From: Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics @ 2023-06-15 12:06 UTC (permalink / raw) To: 'FFmpeg development discussions and patches' > -----Original Message----- > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of > Michael Niedermayer > Sent: środa, 14 czerwca 2023 02:23 > To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> > Subject: Re: [FFmpeg-devel] [PATCH v24 6/9] avformat/mov_muxer: Extended > MOV muxer to handle EVC video content > > On Mon, Jun 12, 2023 at 02:30:27PM +0200, Dawid Kozinski wrote: > > - Changes in mov_write_video_tag function to handle EVC elementary > > stream > > - Provided structure EVCDecoderConfigurationRecord that specifies the > > decoder configuration information for ISO/IEC 23094-1 video content > > > > Signed-off-by: Dawid Kozinski <d.kozinski@samsung.com> > > --- > > libavformat/Makefile | 2 +- > > libavformat/evc.c | 422 ++++++++++++++++++++++++++++++++++++++++ > > libavformat/evc.h | 44 +++++ > > libavformat/isom_tags.c | 2 + > > libavformat/movenc.c | 33 ++++ > > 5 files changed, 502 insertions(+), 1 deletion(-) create mode 100644 > > libavformat/evc.c create mode 100644 libavformat/evc.h > > > > diff --git a/libavformat/Makefile b/libavformat/Makefile index > > 6e4231fda2..d3503196e3 100644 > > --- a/libavformat/Makefile > > +++ b/libavformat/Makefile > > @@ -364,7 +364,7 @@ OBJS-$(CONFIG_MOV_DEMUXER) += mov.o > mov_chan.o mov_esds.o \ > > OBJS-$(CONFIG_MOV_MUXER) += movenc.o av1.o avc.o hevc.o > vpcc.o \ > > movenchint.o mov_chan.o rtp.o \ > > movenccenc.o movenc_ttml.o rawutils.o \ > > - dovi_isom.o > > + dovi_isom.o evc.o > > OBJS-$(CONFIG_MP2_MUXER) += rawenc.o > > OBJS-$(CONFIG_MP3_DEMUXER) += mp3dec.o replaygain.o > > OBJS-$(CONFIG_MP3_MUXER) += mp3enc.o rawenc.o id3v2enc.o > > diff --git a/libavformat/evc.c b/libavformat/evc.c new file mode > > 100644 index 0000000000..431cb107e3 > > --- /dev/null > > +++ b/libavformat/evc.c > > @@ -0,0 +1,422 @@ > > +/* > > + * EVC helper functions for muxers > > + * Copyright (c) 2022 Dawid Kozinski <d.kozinski@samsung.com> > > + * > > + * This file is part of FFmpeg. > > + * > > + * FFmpeg is free software; you can redistribute it and/or > > + * modify it under the terms of the GNU Lesser General Public > > + * License as published by the Free Software Foundation; either > > + * version 2.1 of the License, or (at your option) any later version. > > + * > > + * FFmpeg is distributed in the hope that it will be useful, > > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > + * Lesser General Public License for more details. > > + * > > + * You should have received a copy of the GNU Lesser General Public > > + * License along with FFmpeg; if not, write to the Free Software > > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA > > +02110-1301 USA */ > > [...] > > > + nalu_type = ff_evc_get_nalu_type(data, bytes_to_read, pb); > > functions shared between libavcodec and libavformat need an av*/avpriv* > prefix otherwise linking will fail with shared libs as ff* isnt exported > > Done (v26) > [...] > -- > Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB > > Many that live deserve death. And some that die deserve life. Can you give it to > them? Then do not be too eager to deal out death in judgement. For even the > very wise cannot see all ends. -- Gandalf _______________________________________________ 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". ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [FFmpeg-devel] [PATCH v24 6/9] avformat/mov_muxer: Extended MOV muxer to handle EVC video content 2023-06-12 12:30 ` [FFmpeg-devel] [PATCH v24 6/9] avformat/mov_muxer: Extended MOV muxer to handle EVC video content Dawid Kozinski 2023-06-14 0:23 ` Michael Niedermayer @ 2023-06-19 2:27 ` Wang Bin 2023-06-19 2:43 ` James Almer 1 sibling, 1 reply; 10+ messages in thread From: Wang Bin @ 2023-06-19 2:27 UTC (permalink / raw) To: FFmpeg development discussions and patches - Changes in mov_write_video_tag function to handle EVC elementary stream > - Provided structure EVCDecoderConfigurationRecord that specifies the > decoder configuration information for ISO/IEC 23094-1 video content > > Signed-off-by: Dawid Kozinski <d.kozinski@samsung.com> > --- > libavformat/Makefile | 2 +- > libavformat/evc.c | 422 ++++++++++++++++++++++++++++++++++++++++ > libavformat/evc.h | 44 +++++ > libavformat/isom_tags.c | 2 + > libavformat/movenc.c | 33 ++++ > 5 files changed, 502 insertions(+), 1 deletion(-) > create mode 100644 libavformat/evc.c > create mode 100644 libavformat/evc.h > > diff --git a/libavformat/Makefile b/libavformat/Makefile > index 6e4231fda2..d3503196e3 100644 > --- a/libavformat/Makefile > +++ b/libavformat/Makefile > @@ -364,7 +364,7 @@ OBJS-$(CONFIG_MOV_DEMUXER) += mov.o > mov_chan.o mov_esds.o \ > OBJS-$(CONFIG_MOV_MUXER) += movenc.o av1.o avc.o hevc.o > vpcc.o \ > movenchint.o mov_chan.o rtp.o > \ > movenccenc.o movenc_ttml.o > rawutils.o \ > - dovi_isom.o > + dovi_isom.o evc.o > OBJS-$(CONFIG_MP2_MUXER) += rawenc.o > OBJS-$(CONFIG_MP3_DEMUXER) += mp3dec.o replaygain.o > OBJS-$(CONFIG_MP3_MUXER) += mp3enc.o rawenc.o id3v2enc.o > This breaks msvc build. golomb_tab.o is required in OBJS-$(CONFIG_MOV_MUXER). otherwise i get this error 2023-06-18T12:48:08.5213414Z LD libavformat/avformat-60.dll 2023-06-18T12:48:08.6503045Z LINK : warning LNK4044: unrecognized option '/-icf=safe'; ignored 2023-06-18T12:48:08.8081443Z Creating library libavformat/avformat.lib and object libavformat/avformat.exp 2023-06-18T12:48:08.8219530Z evc.o : error LNK2001: unresolved external symbol ff_golomb_vlc_len 2023-06-18T12:48:08.8267361Z evc.o : error LNK2001: unresolved external symbol ff_ue_golomb_vlc_code 2023-06-18T12:48:09.0122434Z libavformat\avformat-60.dll : fatal error LNK1120: 2 unresolved externals 2023-06-18T12:48:09.0517997Z make: *** [/d/a/avbuild/avbuild/ffmpeg-***/ffbuild/library.mak:119: libavformat/avformat-60.dll] Error 96 full build log: https://github.com/wang-bin/avbuild/actions/runs/5303646918/jobs/9599433665 _______________________________________________ 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". ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [FFmpeg-devel] [PATCH v24 6/9] avformat/mov_muxer: Extended MOV muxer to handle EVC video content 2023-06-19 2:27 ` Wang Bin @ 2023-06-19 2:43 ` James Almer 2023-06-27 9:08 ` Wang Bin 0 siblings, 1 reply; 10+ messages in thread From: James Almer @ 2023-06-19 2:43 UTC (permalink / raw) To: ffmpeg-devel On 6/18/2023 11:27 PM, Wang Bin wrote: > - Changes in mov_write_video_tag function to handle EVC elementary stream >> - Provided structure EVCDecoderConfigurationRecord that specifies the >> decoder configuration information for ISO/IEC 23094-1 video content >> >> Signed-off-by: Dawid Kozinski <d.kozinski@samsung.com> >> --- >> libavformat/Makefile | 2 +- >> libavformat/evc.c | 422 ++++++++++++++++++++++++++++++++++++++++ >> libavformat/evc.h | 44 +++++ >> libavformat/isom_tags.c | 2 + >> libavformat/movenc.c | 33 ++++ >> 5 files changed, 502 insertions(+), 1 deletion(-) >> create mode 100644 libavformat/evc.c >> create mode 100644 libavformat/evc.h >> >> diff --git a/libavformat/Makefile b/libavformat/Makefile >> index 6e4231fda2..d3503196e3 100644 >> --- a/libavformat/Makefile >> +++ b/libavformat/Makefile >> @@ -364,7 +364,7 @@ OBJS-$(CONFIG_MOV_DEMUXER) += mov.o >> mov_chan.o mov_esds.o \ >> OBJS-$(CONFIG_MOV_MUXER) += movenc.o av1.o avc.o hevc.o >> vpcc.o \ >> movenchint.o mov_chan.o rtp.o >> \ >> movenccenc.o movenc_ttml.o >> rawutils.o \ >> - dovi_isom.o >> + dovi_isom.o evc.o >> OBJS-$(CONFIG_MP2_MUXER) += rawenc.o >> OBJS-$(CONFIG_MP3_DEMUXER) += mp3dec.o replaygain.o >> OBJS-$(CONFIG_MP3_MUXER) += mp3enc.o rawenc.o id3v2enc.o >> > > This breaks msvc build. golomb_tab.o is required in > OBJS-$(CONFIG_MOV_MUXER). otherwise i get this error > > 2023-06-18T12:48:08.5213414Z LD libavformat/avformat-60.dll > 2023-06-18T12:48:08.6503045Z LINK : warning LNK4044: unrecognized > option '/-icf=safe'; ignored > 2023-06-18T12:48:08.8081443Z Creating library > libavformat/avformat.lib and object libavformat/avformat.exp > 2023-06-18T12:48:08.8219530Z evc.o : error LNK2001: unresolved > external symbol ff_golomb_vlc_len > 2023-06-18T12:48:08.8267361Z evc.o : error LNK2001: unresolved > external symbol ff_ue_golomb_vlc_code > 2023-06-18T12:48:09.0122434Z libavformat\avformat-60.dll : fatal error > LNK1120: 2 unresolved externals > 2023-06-18T12:48:09.0517997Z make: *** > [/d/a/avbuild/avbuild/ffmpeg-***/ffbuild/library.mak:119: > libavformat/avformat-60.dll] Error 96 > > > full build log: > https://github.com/wang-bin/avbuild/actions/runs/5303646918/jobs/9599433665 Should be fixed. _______________________________________________ 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". ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [FFmpeg-devel] [PATCH v24 6/9] avformat/mov_muxer: Extended MOV muxer to handle EVC video content 2023-06-19 2:43 ` James Almer @ 2023-06-27 9:08 ` Wang Bin 0 siblings, 0 replies; 10+ messages in thread From: Wang Bin @ 2023-06-27 9:08 UTC (permalink / raw) To: FFmpeg development discussions and patches James Almer <jamrial@gmail.com> 于2023年6月19日周一 10:43写道: > On 6/18/2023 11:27 PM, Wang Bin wrote: > > - Changes in mov_write_video_tag function to handle EVC elementary stream > >> - Provided structure EVCDecoderConfigurationRecord that specifies the > >> decoder configuration information for ISO/IEC 23094-1 video content > >> > >> Signed-off-by: Dawid Kozinski <d.kozinski@samsung.com> > >> --- > >> libavformat/Makefile | 2 +- > >> libavformat/evc.c | 422 ++++++++++++++++++++++++++++++++++++++++ > >> libavformat/evc.h | 44 +++++ > >> libavformat/isom_tags.c | 2 + > >> libavformat/movenc.c | 33 ++++ > >> 5 files changed, 502 insertions(+), 1 deletion(-) > >> create mode 100644 libavformat/evc.c > >> create mode 100644 libavformat/evc.h > >> > >> diff --git a/libavformat/Makefile b/libavformat/Makefile > >> index 6e4231fda2..d3503196e3 100644 > >> --- a/libavformat/Makefile > >> +++ b/libavformat/Makefile > >> @@ -364,7 +364,7 @@ OBJS-$(CONFIG_MOV_DEMUXER) += mov.o > >> mov_chan.o mov_esds.o \ > >> OBJS-$(CONFIG_MOV_MUXER) += movenc.o av1.o avc.o > hevc.o > >> vpcc.o \ > >> movenchint.o mov_chan.o > rtp.o > >> \ > >> movenccenc.o movenc_ttml.o > >> rawutils.o \ > >> - dovi_isom.o > >> + dovi_isom.o evc.o > >> OBJS-$(CONFIG_MP2_MUXER) += rawenc.o > >> OBJS-$(CONFIG_MP3_DEMUXER) += mp3dec.o replaygain.o > >> OBJS-$(CONFIG_MP3_MUXER) += mp3enc.o rawenc.o > id3v2enc.o > >> > > > > This breaks msvc build. golomb_tab.o is required in > > OBJS-$(CONFIG_MOV_MUXER). otherwise i get this error > > > > 2023-06-18T12:48:08.5213414Z LD libavformat/avformat-60.dll > > 2023-06-18T12:48:08.6503045Z LINK : warning LNK4044: unrecognized > > option '/-icf=safe'; ignored > > 2023-06-18T12:48:08.8081443Z Creating library > > libavformat/avformat.lib and object libavformat/avformat.exp > > 2023-06-18T12:48:08.8219530Z evc.o : error LNK2001: unresolved > > external symbol ff_golomb_vlc_len > > 2023-06-18T12:48:08.8267361Z evc.o : error LNK2001: unresolved > > external symbol ff_ue_golomb_vlc_code > > 2023-06-18T12:48:09.0122434Z libavformat\avformat-60.dll : fatal error > > LNK1120: 2 unresolved externals > > 2023-06-18T12:48:09.0517997Z make: *** > > [/d/a/avbuild/avbuild/ffmpeg-***/ffbuild/library.mak:119: > > libavformat/avformat-60.dll] Error 96 > > > > > > full build log: > > > https://github.com/wang-bin/avbuild/actions/runs/5303646918/jobs/9599433665 > > Should be fixed. > broken again, in commit d0fc1b3. why not adding golomb_tab.o in makefile? 2023-06-27T02:21:02.4793190Z Undefined symbols for architecture x86_64: 2023-06-27T02:21:02.4793570Z "_ff_golomb_vlc_len", referenced from: 2023-06-27T02:21:02.4793850Z _get_ue_golomb_31 in evc.o 2023-06-27T02:21:02.4822020Z "_ff_ue_golomb_vlc_code", referenced from: 2023-06-27T02:21:02.4822390Z _get_ue_golomb_31 in evc.o 2023-06-27T02:21:02.4849070Z ld: symbol(s) not found for architecture x86_64 Regards _______________________________________________ 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". ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2023-06-27 9:08 UTC | newest] Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <CGME20230612123038eucas1p1c481a42fcbf3ae39b3dd756dcedc64e6@eucas1p1.samsung.com> 2023-06-12 12:30 ` [FFmpeg-devel] [PATCH v24 6/9] avformat/mov_muxer: Extended MOV muxer to handle EVC video content Dawid Kozinski 2023-06-14 0:23 ` Michael Niedermayer 2023-06-14 1:00 ` James Almer 2023-06-15 7:20 ` Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics 2023-06-15 12:06 ` Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics 2023-06-15 9:41 ` Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics 2023-06-15 12:06 ` Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics 2023-06-19 2:27 ` Wang Bin 2023-06-19 2:43 ` James Almer 2023-06-27 9:08 ` Wang Bin
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git