avformat/mxfenc: simplify d-10 ul handling
This commit is contained in:
parent
635a5c11a6
commit
d65aaf8ea9
@ -123,18 +123,8 @@ enum ULIndex {
|
||||
INDEX_MPEG2 = 0,
|
||||
INDEX_AES3,
|
||||
INDEX_WAV,
|
||||
INDEX_D10_625_50_50_VIDEO,
|
||||
INDEX_D10_625_50_50_AUDIO,
|
||||
INDEX_D10_525_60_50_VIDEO,
|
||||
INDEX_D10_525_60_50_AUDIO,
|
||||
INDEX_D10_625_50_40_VIDEO,
|
||||
INDEX_D10_625_50_40_AUDIO,
|
||||
INDEX_D10_525_60_40_VIDEO,
|
||||
INDEX_D10_525_60_40_AUDIO,
|
||||
INDEX_D10_625_50_30_VIDEO,
|
||||
INDEX_D10_625_50_30_AUDIO,
|
||||
INDEX_D10_525_60_30_VIDEO,
|
||||
INDEX_D10_525_60_30_AUDIO,
|
||||
INDEX_D10_VIDEO,
|
||||
INDEX_D10_AUDIO,
|
||||
INDEX_DV,
|
||||
INDEX_DNXHD,
|
||||
INDEX_JPEG2000,
|
||||
@ -179,60 +169,16 @@ static const MXFContainerEssenceEntry mxf_essence_container_uls[] = {
|
||||
{ 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x16,0x01,0x01,0x00 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00 },
|
||||
mxf_write_wav_desc },
|
||||
// D-10 625/50 PAL 50mb/s
|
||||
// D-10 Video
|
||||
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x01,0x01 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x05,0x01,0x01,0x00 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x01,0x02,0x01,0x01 },
|
||||
mxf_write_cdci_desc },
|
||||
// D-10 Audio
|
||||
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x01,0x01 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x06,0x01,0x10,0x00 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00 },
|
||||
mxf_write_generic_sound_desc },
|
||||
// D-10 525/60 NTSC 50mb/s
|
||||
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x02,0x01 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x05,0x01,0x01,0x00 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x01,0x02,0x01,0x02 },
|
||||
mxf_write_cdci_desc },
|
||||
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x02,0x01 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x06,0x01,0x10,0x00 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00 },
|
||||
mxf_write_generic_sound_desc },
|
||||
// D-10 625/50 PAL 40mb/s
|
||||
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x03,0x01 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x05,0x01,0x01,0x00 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x01,0x02,0x01,0x03 },
|
||||
mxf_write_cdci_desc },
|
||||
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x03,0x01 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x06,0x01,0x10,0x00 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00 },
|
||||
mxf_write_generic_sound_desc },
|
||||
// D-10 525/60 NTSC 40mb/s
|
||||
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x04,0x01 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x05,0x01,0x01,0x00 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x01,0x02,0x01,0x04 },
|
||||
mxf_write_cdci_desc },
|
||||
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x04,0x01 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x06,0x01,0x10,0x00 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00 },
|
||||
mxf_write_generic_sound_desc },
|
||||
// D-10 625/50 PAL 30mb/s
|
||||
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x05,0x01 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x05,0x01,0x01,0x00 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x01,0x02,0x01,0x05 },
|
||||
mxf_write_cdci_desc },
|
||||
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x05,0x01 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x06,0x01,0x10,0x00 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00 },
|
||||
mxf_write_generic_sound_desc },
|
||||
// D-10 525/60 NTSC 30mb/s
|
||||
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x06,0x01 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x05,0x01,0x01,0x00 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x01,0x02,0x01,0x06 },
|
||||
mxf_write_cdci_desc },
|
||||
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x06,0x01 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x06,0x01,0x10,0x00 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00 },
|
||||
mxf_write_generic_sound_desc },
|
||||
// DV
|
||||
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x02,0x7F,0x01 },
|
||||
{ 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x18,0x01,0x01,0x00 },
|
||||
@ -269,6 +215,24 @@ static const MXFContainerEssenceEntry mxf_essence_container_uls[] = {
|
||||
NULL },
|
||||
};
|
||||
|
||||
static const UID mxf_d10_codec_uls[] = {
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x01,0x02,0x01,0x01 }, // D-10 625/50 PAL 50mb/s
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x01,0x02,0x01,0x02 }, // D-10 525/50 NTSC 50mb/s
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x01,0x02,0x01,0x03 }, // D-10 625/50 PAL 40mb/s
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x01,0x02,0x01,0x04 }, // D-10 525/50 NTSC 40mb/s
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x01,0x02,0x01,0x05 }, // D-10 625/50 PAL 30mb/s
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x01,0x02,0x01,0x06 }, // D-10 525/50 NTSC 30mb/s
|
||||
};
|
||||
|
||||
static const UID mxf_d10_container_uls[] = {
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x01,0x01 }, // D-10 625/50 PAL 50mb/s
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x02,0x01 }, // D-10 525/50 NTSC 50mb/s
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x03,0x01 }, // D-10 625/50 PAL 40mb/s
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x04,0x01 }, // D-10 525/50 NTSC 40mb/s
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x05,0x01 }, // D-10 625/50 PAL 30mb/s
|
||||
{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x06,0x01 }, // D-10 525/50 NTSC 30mb/s
|
||||
};
|
||||
|
||||
typedef struct MXFContext {
|
||||
AVClass *av_class;
|
||||
int64_t footer_partition_offset;
|
||||
@ -2491,6 +2455,7 @@ static int mxf_write_header(AVFormatContext *s)
|
||||
if (!sc)
|
||||
return AVERROR(ENOMEM);
|
||||
st->priv_data = sc;
|
||||
sc->index = -1;
|
||||
|
||||
if (((i == 0) ^ (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)) && s->oformat != &ff_mxf_opatom_muxer) {
|
||||
av_log(s, AV_LOG_ERROR, "there must be exactly one video stream and it must be the first one\n");
|
||||
@ -2550,25 +2515,29 @@ static int mxf_write_header(AVFormatContext *s)
|
||||
mxf->cbr_index = 1;
|
||||
|
||||
if (s->oformat == &ff_mxf_d10_muxer) {
|
||||
int ntsc = mxf->time_base.den != 25;
|
||||
int ul_index;
|
||||
|
||||
if (st->codecpar->codec_id != AV_CODEC_ID_MPEG2VIDEO) {
|
||||
av_log(s, AV_LOG_ERROR, "error MXF D-10 only support MPEG-2 Video\n");
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
if ((sc->video_bit_rate == 50000000) && (mxf->time_base.den == 25)) {
|
||||
sc->index = INDEX_D10_625_50_50_VIDEO;
|
||||
} else if ((sc->video_bit_rate == 49999840 || sc->video_bit_rate == 50000000) && (mxf->time_base.den != 25)) {
|
||||
sc->index = INDEX_D10_525_60_50_VIDEO;
|
||||
ul_index = 0;
|
||||
} else if ((sc->video_bit_rate == 49999840 || sc->video_bit_rate == 50000000) && ntsc) {
|
||||
ul_index = 1;
|
||||
} else if (sc->video_bit_rate == 40000000) {
|
||||
if (mxf->time_base.den == 25) sc->index = INDEX_D10_625_50_40_VIDEO;
|
||||
else sc->index = INDEX_D10_525_60_40_VIDEO;
|
||||
ul_index = 2+ntsc;
|
||||
} else if (sc->video_bit_rate == 30000000) {
|
||||
if (mxf->time_base.den == 25) sc->index = INDEX_D10_625_50_30_VIDEO;
|
||||
else sc->index = INDEX_D10_525_60_30_VIDEO;
|
||||
ul_index = 4+ntsc;
|
||||
} else {
|
||||
av_log(s, AV_LOG_ERROR, "error MXF D-10 only support 30/40/50 mbit/s\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
sc->codec_ul = &mxf_d10_codec_uls[ul_index];
|
||||
sc->container_ul = &mxf_d10_container_uls[ul_index];
|
||||
sc->index = INDEX_D10_VIDEO;
|
||||
sc->signal_standard = 1;
|
||||
sc->color_siting = 0;
|
||||
sc->frame_size = (int64_t)sc->video_bit_rate *
|
||||
@ -2591,7 +2560,8 @@ static int mxf_write_header(AVFormatContext *s)
|
||||
st->codecpar->codec_id != AV_CODEC_ID_PCM_S24LE) {
|
||||
av_log(s, AV_LOG_ERROR, "MXF D-10 only support 16 or 24 bits le audio\n");
|
||||
}
|
||||
sc->index = ((MXFStreamContext*)s->streams[0]->priv_data)->index + 1;
|
||||
sc->index = INDEX_D10_AUDIO;
|
||||
sc->container_ul = ((MXFStreamContext*)s->streams[0]->priv_data)->container_ul;
|
||||
sc->frame_size = 4 + 8 * spf[0].samples_per_frame[0] * 4;
|
||||
} else if (s->oformat == &ff_mxf_opatom_muxer) {
|
||||
AVRational tbc = av_inv_q(mxf->audio_edit_rate);
|
||||
@ -2638,7 +2608,7 @@ static int mxf_write_header(AVFormatContext *s)
|
||||
}
|
||||
}
|
||||
|
||||
if (!sc->index) {
|
||||
if (sc->index == -1) {
|
||||
sc->index = mxf_get_essence_container_ul_index(st->codecpar->codec_id);
|
||||
if (sc->index == -1) {
|
||||
av_log(s, AV_LOG_ERROR, "track %d: could not find essence container ul, "
|
||||
@ -2647,8 +2617,10 @@ static int mxf_write_header(AVFormatContext *s)
|
||||
}
|
||||
}
|
||||
|
||||
sc->codec_ul = &mxf_essence_container_uls[sc->index].codec_ul;
|
||||
sc->container_ul = &mxf_essence_container_uls[sc->index].container_ul;
|
||||
if (!sc->codec_ul)
|
||||
sc->codec_ul = &mxf_essence_container_uls[sc->index].codec_ul;
|
||||
if (!sc->container_ul)
|
||||
sc->container_ul = &mxf_essence_container_uls[sc->index].container_ul;
|
||||
|
||||
memcpy(sc->track_essence_element_key, mxf_essence_container_uls[sc->index].element_ul, 15);
|
||||
sc->track_essence_element_key[15] = present[sc->index];
|
||||
|
Loading…
x
Reference in New Issue
Block a user