mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avformat/mov: Refactor mov_read_dvcc_dvvc to use ff_isom_parse_dvcc_dvvc
To avoid duplicating code. The implementation in dovi_isom is identical. Signed-off-by: quietvoid <tcChlisop0@gmail.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
parent
05c07943b0
commit
9906f9ae3b
@ -339,7 +339,7 @@ OBJS-$(CONFIG_MMF_MUXER) += mmf.o rawenc.o
|
||||
OBJS-$(CONFIG_MODS_DEMUXER) += mods.o
|
||||
OBJS-$(CONFIG_MOFLEX_DEMUXER) += moflex.o
|
||||
OBJS-$(CONFIG_MOV_DEMUXER) += mov.o mov_chan.o mov_esds.o \
|
||||
qtpalette.o replaygain.o
|
||||
qtpalette.o replaygain.o dovi_isom.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
|
||||
|
@ -55,6 +55,7 @@
|
||||
#include "avformat.h"
|
||||
#include "internal.h"
|
||||
#include "avio_internal.h"
|
||||
#include "dovi_isom.h"
|
||||
#include "riff.h"
|
||||
#include "isom.h"
|
||||
#include "libavcodec/get_bits.h"
|
||||
@ -7062,58 +7063,21 @@ static int mov_read_dmlp(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
||||
static int mov_read_dvcc_dvvc(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
||||
{
|
||||
AVStream *st;
|
||||
uint32_t buf;
|
||||
AVDOVIDecoderConfigurationRecord *dovi;
|
||||
size_t dovi_size;
|
||||
uint8_t buf[ISOM_DVCC_DVVC_SIZE];
|
||||
int ret;
|
||||
int64_t read_size = atom.size;
|
||||
|
||||
if (c->fc->nb_streams < 1)
|
||||
return 0;
|
||||
st = c->fc->streams[c->fc->nb_streams-1];
|
||||
|
||||
if ((uint64_t)atom.size > (1<<30) || atom.size < 4)
|
||||
return AVERROR_INVALIDDATA;
|
||||
// At most 24 bytes
|
||||
read_size = FFMIN(read_size, ISOM_DVCC_DVVC_SIZE);
|
||||
|
||||
dovi = av_dovi_alloc(&dovi_size);
|
||||
if (!dovi)
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
dovi->dv_version_major = avio_r8(pb);
|
||||
dovi->dv_version_minor = avio_r8(pb);
|
||||
|
||||
buf = avio_rb16(pb);
|
||||
dovi->dv_profile = (buf >> 9) & 0x7f; // 7 bits
|
||||
dovi->dv_level = (buf >> 3) & 0x3f; // 6 bits
|
||||
dovi->rpu_present_flag = (buf >> 2) & 0x01; // 1 bit
|
||||
dovi->el_present_flag = (buf >> 1) & 0x01; // 1 bit
|
||||
dovi->bl_present_flag = buf & 0x01; // 1 bit
|
||||
if (atom.size >= 24) { // 4 + 4 + 4 * 4
|
||||
buf = avio_r8(pb);
|
||||
dovi->dv_bl_signal_compatibility_id = (buf >> 4) & 0x0f; // 4 bits
|
||||
} else {
|
||||
// 0 stands for None
|
||||
// Dolby Vision V1.2.93 profiles and levels
|
||||
dovi->dv_bl_signal_compatibility_id = 0;
|
||||
}
|
||||
|
||||
ret = av_stream_add_side_data(st, AV_PKT_DATA_DOVI_CONF,
|
||||
(uint8_t *)dovi, dovi_size);
|
||||
if (ret < 0) {
|
||||
av_free(dovi);
|
||||
if ((ret = ffio_read_size(pb, buf, read_size)) < 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
av_log(c, AV_LOG_TRACE, "DOVI in dvcC/dvvC/dvwC box, version: %d.%d, profile: %d, level: %d, "
|
||||
"rpu flag: %d, el flag: %d, bl flag: %d, compatibility id: %d\n",
|
||||
dovi->dv_version_major, dovi->dv_version_minor,
|
||||
dovi->dv_profile, dovi->dv_level,
|
||||
dovi->rpu_present_flag,
|
||||
dovi->el_present_flag,
|
||||
dovi->bl_present_flag,
|
||||
dovi->dv_bl_signal_compatibility_id
|
||||
);
|
||||
|
||||
return 0;
|
||||
return ff_isom_parse_dvcc_dvvc(c->fc, st, buf, read_size);
|
||||
}
|
||||
|
||||
static int mov_read_kind(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
||||
|
Loading…
Reference in New Issue
Block a user