mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avcodec/av1dec: parse DV profile 10 T.35 OBU
See previous commit.
This commit is contained in:
parent
a5d1e69b3b
commit
da39a19aad
@ -734,6 +734,7 @@ static av_cold int av1_decode_free(AVCodecContext *avctx)
|
|||||||
|
|
||||||
ff_cbs_fragment_free(&s->current_obu);
|
ff_cbs_fragment_free(&s->current_obu);
|
||||||
ff_cbs_close(&s->cbc);
|
ff_cbs_close(&s->cbc);
|
||||||
|
ff_dovi_ctx_unref(&s->dovi);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -828,6 +829,7 @@ static av_cold int av1_decode_init(AVCodecContext *avctx)
|
|||||||
{
|
{
|
||||||
AV1DecContext *s = avctx->priv_data;
|
AV1DecContext *s = avctx->priv_data;
|
||||||
AV1RawSequenceHeader *seq;
|
AV1RawSequenceHeader *seq;
|
||||||
|
const AVPacketSideData *sd;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
s->avctx = avctx;
|
s->avctx = avctx;
|
||||||
@ -883,6 +885,12 @@ static av_cold int av1_decode_init(AVCodecContext *avctx)
|
|||||||
ff_cbs_fragment_reset(&s->current_obu);
|
ff_cbs_fragment_reset(&s->current_obu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
s->dovi.logctx = avctx;
|
||||||
|
s->dovi.dv_profile = 10; // default for AV1
|
||||||
|
sd = ff_get_coded_side_data(avctx, AV_PKT_DATA_DOVI_CONF);
|
||||||
|
if (sd && sd->size > 0)
|
||||||
|
ff_dovi_update_cfg(&s->dovi, (AVDOVIDecoderConfigurationRecord *) sd->data);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -936,6 +944,7 @@ static int export_itut_t35(AVCodecContext *avctx, AVFrame *frame,
|
|||||||
const AV1RawMetadataITUTT35 *itut_t35)
|
const AV1RawMetadataITUTT35 *itut_t35)
|
||||||
{
|
{
|
||||||
GetByteContext gb;
|
GetByteContext gb;
|
||||||
|
AV1DecContext *s = avctx->priv_data;
|
||||||
int ret, provider_code;
|
int ret, provider_code;
|
||||||
|
|
||||||
bytestream2_init(&gb, itut_t35->payload, itut_t35->payload_size);
|
bytestream2_init(&gb, itut_t35->payload, itut_t35->payload_size);
|
||||||
@ -985,6 +994,22 @@ static int export_itut_t35(AVCodecContext *avctx, AVFrame *frame,
|
|||||||
return ret;
|
return ret;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 0x3B: { // dolby_provider_code
|
||||||
|
int provider_oriented_code = bytestream2_get_be32(&gb);
|
||||||
|
if (itut_t35->itu_t_t35_country_code != 0xB5 || provider_oriented_code != 0x800)
|
||||||
|
break;
|
||||||
|
|
||||||
|
ret = ff_dovi_rpu_parse(&s->dovi, gb.buffer, gb.buffer_end - gb.buffer);
|
||||||
|
if (ret < 0) {
|
||||||
|
av_log(avctx, AV_LOG_WARNING, "Error parsing DOVI OBU.\n");
|
||||||
|
break; // ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = ff_dovi_attach_side_data(&s->dovi, frame);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
break;
|
||||||
|
}
|
||||||
default: // ignore unsupported provider codes
|
default: // ignore unsupported provider codes
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
#include "packet.h"
|
#include "packet.h"
|
||||||
#include "cbs.h"
|
#include "cbs.h"
|
||||||
#include "cbs_av1.h"
|
#include "cbs_av1.h"
|
||||||
|
#include "dovi_rpu.h"
|
||||||
|
|
||||||
typedef struct AV1Frame {
|
typedef struct AV1Frame {
|
||||||
AVFrame *f;
|
AVFrame *f;
|
||||||
@ -81,6 +82,7 @@ typedef struct AV1DecContext {
|
|||||||
AV1RawMetadataHDRCLL *cll;
|
AV1RawMetadataHDRCLL *cll;
|
||||||
AV1RawOBU *mdcv_ref; ///< RefStruct reference backing mdcv
|
AV1RawOBU *mdcv_ref; ///< RefStruct reference backing mdcv
|
||||||
AV1RawMetadataHDRMDCV *mdcv;
|
AV1RawMetadataHDRMDCV *mdcv;
|
||||||
|
DOVIContext dovi;
|
||||||
AVFifo *itut_t35_fifo;
|
AVFifo *itut_t35_fifo;
|
||||||
|
|
||||||
uint16_t tile_num;
|
uint16_t tile_num;
|
||||||
|
Loading…
Reference in New Issue
Block a user