You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-04 22:03:09 +02:00
avcodec/hevc/hevcdec: export 3D Reference Displays side data
Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
committed by
Timo Rothenpieler
parent
dbe347f074
commit
9c2028b806
@ -36,6 +36,7 @@
|
|||||||
#include "libavutil/opt.h"
|
#include "libavutil/opt.h"
|
||||||
#include "libavutil/pixdesc.h"
|
#include "libavutil/pixdesc.h"
|
||||||
#include "libavutil/stereo3d.h"
|
#include "libavutil/stereo3d.h"
|
||||||
|
#include "libavutil/tdrdi.h"
|
||||||
#include "libavutil/timecode.h"
|
#include "libavutil/timecode.h"
|
||||||
|
|
||||||
#include "aom_film_grain.h"
|
#include "aom_film_grain.h"
|
||||||
@ -4099,6 +4100,55 @@ static int hevc_update_thread_context(AVCodecContext *dst,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static int hevc_sei_to_context(AVCodecContext *avctx, HEVCSEI *sei)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (sei->tdrdi.num_ref_displays) {
|
||||||
|
AVBufferRef *buf;
|
||||||
|
size_t size;
|
||||||
|
AV3DReferenceDisplaysInfo *tdrdi = av_tdrdi_alloc(sei->tdrdi.num_ref_displays, &size);
|
||||||
|
|
||||||
|
if (!tdrdi)
|
||||||
|
return AVERROR(ENOMEM);
|
||||||
|
|
||||||
|
buf = av_buffer_create((uint8_t *)tdrdi, size, NULL, NULL, 0);
|
||||||
|
if (!buf) {
|
||||||
|
av_free(tdrdi);
|
||||||
|
return AVERROR(ENOMEM);
|
||||||
|
}
|
||||||
|
|
||||||
|
tdrdi->prec_ref_display_width = sei->tdrdi.prec_ref_display_width;
|
||||||
|
tdrdi->ref_viewing_distance_flag = sei->tdrdi.ref_viewing_distance_flag;
|
||||||
|
tdrdi->prec_ref_viewing_dist = sei->tdrdi.prec_ref_viewing_dist;
|
||||||
|
tdrdi->num_ref_displays = sei->tdrdi.num_ref_displays;
|
||||||
|
for (int i = 0; i < sei->tdrdi.num_ref_displays; i++) {
|
||||||
|
AV3DReferenceDisplay *display = av_tdrdi_get_display(tdrdi, i);
|
||||||
|
|
||||||
|
display->left_view_id = sei->tdrdi.left_view_id[i];
|
||||||
|
display->right_view_id = sei->tdrdi.right_view_id[i];
|
||||||
|
display->exponent_ref_display_width = sei->tdrdi.exponent_ref_display_width[i];
|
||||||
|
display->mantissa_ref_display_width = sei->tdrdi.mantissa_ref_display_width[i];
|
||||||
|
display->exponent_ref_viewing_distance = sei->tdrdi.exponent_ref_viewing_distance[i];
|
||||||
|
display->mantissa_ref_viewing_distance = sei->tdrdi.mantissa_ref_viewing_distance[i];
|
||||||
|
display->additional_shift_present_flag = sei->tdrdi.additional_shift_present_flag[i];
|
||||||
|
display->num_sample_shift = sei->tdrdi.num_sample_shift[i];
|
||||||
|
}
|
||||||
|
ret = ff_frame_new_side_data_from_buf_ext(avctx, &avctx->decoded_side_data, &avctx->nb_decoded_side_data,
|
||||||
|
AV_FRAME_DATA_3D_REFERENCE_DISPLAYS, &buf);
|
||||||
|
if (ret < 0) {
|
||||||
|
av_buffer_unref(&buf);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = ff_h2645_sei_to_context(avctx, &sei->common);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static av_cold int hevc_decode_init(AVCodecContext *avctx)
|
static av_cold int hevc_decode_init(AVCodecContext *avctx)
|
||||||
{
|
{
|
||||||
HEVCContext *s = avctx->priv_data;
|
HEVCContext *s = avctx->priv_data;
|
||||||
@ -4122,7 +4172,7 @@ static av_cold int hevc_decode_init(AVCodecContext *avctx)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = ff_h2645_sei_to_context(avctx, &s->sei.common);
|
ret = hevc_sei_to_context(avctx, &s->sei);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
#include "version_major.h"
|
#include "version_major.h"
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_MINOR 4
|
#define LIBAVCODEC_VERSION_MINOR 4
|
||||||
#define LIBAVCODEC_VERSION_MICRO 101
|
#define LIBAVCODEC_VERSION_MICRO 102
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||||
LIBAVCODEC_VERSION_MINOR, \
|
LIBAVCODEC_VERSION_MINOR, \
|
||||||
|
Reference in New Issue
Block a user