[FFmpeg-devel] [PATCH, v4] libavformat/movenc: Add support for HEVC in .3gp
Steven Liu
lq at chinaffmpeg.org
Fri Dec 11 12:35:45 EET 2020
> 2020年12月11日 下午5:48,Sun Zhenliang <hisunzhenliang at outlook.com> 写道:
>
>
>
>>> + if (st->codecpar->codec_id == AV_CODEC_ID_H265){
>> pay attention about the code style
>
> Sorry, I couldn't see problems in code style. Can you explain it in more detail, it would be helpful.
Space?
>
> Appreciate and regards,
> SunZhenliang
> ________________________________
> 发件人: Steven Liu <lq at chinaffmpeg.org>
> 发送时间: 2020年12月11日 15:50
> 收件人: FFmpeg development discussions and patches <ffmpeg-devel at ffmpeg.org>
> 抄送: Steven Liu <lq at chinaffmpeg.org>; hisunzhenliang at outlook.com <hisunzhenliang at outlook.com>
> 主题: Re: [FFmpeg-devel] [PATCH, v4] libavformat/movenc: Add support for HEVC in .3gp
>
>
>
>> 2020年12月11日 下午1:58,hisunzhenliang at outlook.com 写道:
>>
>> From: SunZhenliang <hisunzhenliang at outlook.com>
>>
>> Just add HEVC's tag in 3gp tag list and it works to support HEVC in
>> 3gp files.
>>
>> Signed-off-by: SunZhenliang <hisunzhenliang at outlook.com>
>> ---
>> libavformat/movenc.c | 29 +++++++++++++++++++++--------
>> 1 file changed, 21 insertions(+), 8 deletions(-)
>>
>> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
>> index 18fa3f9b5e..daf33b634f 100644
>> --- a/libavformat/movenc.c
>> +++ b/libavformat/movenc.c
>> @@ -4923,7 +4923,7 @@ static int mov_write_mdat_tag(AVIOContext *pb, MOVMuxContext *mov)
>> }
>>
>> static void mov_write_ftyp_tag_internal(AVIOContext *pb, AVFormatContext *s,
>> - int has_h264, int has_video, int write_minor)
>> + int has_h2645, int has_video, int write_minor)
>> {
>> MOVMuxContext *mov = s->priv_data;
>> int minor = 0x200;
>> @@ -4931,11 +4931,11 @@ static void mov_write_ftyp_tag_internal(AVIOContext *pb, AVFormatContext *s,
>> if (mov->major_brand && strlen(mov->major_brand) >= 4)
>> ffio_wfourcc(pb, mov->major_brand);
>> else if (mov->mode == MODE_3GP) {
>> - ffio_wfourcc(pb, has_h264 ? "3gp6" : "3gp4");
>> - minor = has_h264 ? 0x100 : 0x200;
>> + ffio_wfourcc(pb, has_h2645 ? "3gp6" : "3gp4");
>> + minor = has_h2645 ? 0x100 : 0x200;
>> } else if (mov->mode & MODE_3G2) {
>> - ffio_wfourcc(pb, has_h264 ? "3g2b" : "3g2a");
>> - minor = has_h264 ? 0x20000 : 0x10000;
>> + ffio_wfourcc(pb, has_h2645 ? "3g2b" : "3g2a");
>> + minor = has_h2645 ? 0x20000 : 0x10000;
>> } else if (mov->mode == MODE_PSP)
>> ffio_wfourcc(pb, "MSNV");
>> else if (mov->mode == MODE_MP4 && mov->flags & FF_MOV_FLAG_FRAGMENT &&
>> @@ -4964,7 +4964,8 @@ static int mov_write_ftyp_tag(AVIOContext *pb, AVFormatContext *s)
>> {
>> MOVMuxContext *mov = s->priv_data;
>> int64_t pos = avio_tell(pb);
>> - int has_h264 = 0, has_av1 = 0, has_video = 0;
>> + int has_h264 = 0, has_h265 = 0, has_av1 = 0, has_video = 0;
>> + uint32_t h265_codec_tag = 0;
>> int i;
>>
>> for (i = 0; i < s->nb_streams; i++) {
>> @@ -4975,6 +4976,10 @@ static int mov_write_ftyp_tag(AVIOContext *pb, AVFormatContext *s)
>> has_video = 1;
>> if (st->codecpar->codec_id == AV_CODEC_ID_H264)
>> has_h264 = 1;
>> + if (st->codecpar->codec_id == AV_CODEC_ID_H265){
> pay attention about the code style
>> + has_h265 = 1;
>> + h265_codec_tag = st->codecpar->codec_tag;
>> + }
>> if (st->codecpar->codec_id == AV_CODEC_ID_AV1)
>> has_av1 = 1;
>> }
>> @@ -4983,9 +4988,9 @@ static int mov_write_ftyp_tag(AVIOContext *pb, AVFormatContext *s)
>> ffio_wfourcc(pb, "ftyp");
>>
>> // Write major brand
>> - mov_write_ftyp_tag_internal(pb, s, has_h264, has_video, 1);
>> + mov_write_ftyp_tag_internal(pb, s, has_h264 || has_h265 , has_video, 1);
>> // Write the major brand as the first compatible brand as well
>> - mov_write_ftyp_tag_internal(pb, s, has_h264, has_video, 0);
>> + mov_write_ftyp_tag_internal(pb, s, has_h264 || has_h265, has_video, 0);
>>
>> // Write compatible brands, ensuring that we don't write the major brand as a
>> // compatible brand a second time.
>> @@ -5018,6 +5023,12 @@ static int mov_write_ftyp_tag(AVIOContext *pb, AVFormatContext *s)
>> ffio_wfourcc(pb, "iso2");
>> if (has_h264)
>> ffio_wfourcc(pb, "avc1");
>> + if (has_h265){
> Ditto
>
>> + if (h265_codec_tag == MKTAG('h','e','v','1'))
>> + ffio_wfourcc(pb, "hev1");
>> + else
>> + ffio_wfourcc(pb, "hvc1");
>> + }
>> }
>> }
>>
>> @@ -7103,6 +7114,8 @@ static int mov_check_bitstream(struct AVFormatContext *s, const AVPacket *pkt)
>> static const AVCodecTag codec_3gp_tags[] = {
>> { AV_CODEC_ID_H263, MKTAG('s','2','6','3') },
>> { AV_CODEC_ID_H264, MKTAG('a','v','c','1') },
>> + { AV_CODEC_ID_HEVC, MKTAG('h','e','v','1') },
>> + { AV_CODEC_ID_HEVC, MKTAG('h','v','c','1') },
>> { AV_CODEC_ID_MPEG4, MKTAG('m','p','4','v') },
>> { AV_CODEC_ID_AAC, MKTAG('m','p','4','a') },
>> { AV_CODEC_ID_AMR_NB, MKTAG('s','a','m','r') },
>> --
>> 2.20.1
>>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>> To unsubscribe, visit link above, or email
>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>
> Other part lgtm.
>
> Thanks
>
> Steven Liu
>
>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
Thanks
Steven Liu
More information about the ffmpeg-devel
mailing list