diff options
author | Luca Barbato <lu_zero@gentoo.org> | 2014-11-04 21:11:47 +0100 |
---|---|---|
committer | Luca Barbato <lu_zero@gentoo.org> | 2014-11-09 12:29:59 +0100 |
commit | e3e317e0c015b164b6c2eb8913e393216d78de23 (patch) | |
tree | 121aa2bb9604a6646540f357f9045fb7eebd518e /libavcodec/utils.c | |
parent | 9a5ac36b69ede4563e9ecd734141b12ea3280fbc (diff) | |
download | ffmpeg-e3e317e0c015b164b6c2eb8913e393216d78de23.tar.gz |
lavc: Compact the side-data passthrough
Diffstat (limited to 'libavcodec/utils.c')
-rw-r--r-- | libavcodec/utils.c | 50 |
1 files changed, 21 insertions, 29 deletions
diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 61893da429..8cbd47b84d 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -560,9 +560,15 @@ FF_ENABLE_DEPRECATION_WARNINGS int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame) { AVPacket *pkt = avctx->internal->pkt; - uint8_t *packet_sd; - int size; - AVFrameSideData *frame_sd; + int i; + struct { + enum AVPacketSideDataType packet; + enum AVFrameSideDataType frame; + } sd[] = { + { AV_PKT_DATA_REPLAYGAIN , AV_FRAME_DATA_REPLAYGAIN }, + { AV_PKT_DATA_DISPLAYMATRIX, AV_FRAME_DATA_DISPLAYMATRIX }, + { AV_PKT_DATA_STEREO3D, AV_FRAME_DATA_STEREO3D }, + }; frame->color_primaries = avctx->color_primaries; frame->color_trc = avctx->color_trc; @@ -578,32 +584,18 @@ int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame) frame->pkt_pts = pkt->pts; - /* copy the replaygain data to the output frame */ - packet_sd = av_packet_get_side_data(pkt, AV_PKT_DATA_REPLAYGAIN, &size); - if (packet_sd) { - frame_sd = av_frame_new_side_data(frame, AV_FRAME_DATA_REPLAYGAIN, size); - if (!frame_sd) - return AVERROR(ENOMEM); - - memcpy(frame_sd->data, packet_sd, size); - } - /* copy the displaymatrix to the output frame */ - packet_sd = av_packet_get_side_data(pkt, AV_PKT_DATA_DISPLAYMATRIX, &size); - if (packet_sd) { - frame_sd = av_frame_new_side_data(frame, AV_FRAME_DATA_DISPLAYMATRIX, size); - if (!frame_sd) - return AVERROR(ENOMEM); - - memcpy(frame_sd->data, packet_sd, size); - } - /* copy the stereo3d format to the output frame */ - packet_sd = av_packet_get_side_data(pkt, AV_PKT_DATA_STEREO3D, &size); - if (packet_sd) { - frame_sd = av_frame_new_side_data(frame, AV_FRAME_DATA_STEREO3D, size); - if (!frame_sd) - return AVERROR(ENOMEM); - - memcpy(frame_sd->data, packet_sd, size); + for (i = 0; i < FF_ARRAY_ELEMS(sd); i++) { + int size; + uint8_t *packet_sd = av_packet_get_side_data(pkt, sd[i].packet, &size); + if (packet_sd) { + AVFrameSideData *frame_sd = av_frame_new_side_data(frame, + sd[i].frame, + size); + if (!frame_sd) + return AVERROR(ENOMEM); + + memcpy(frame_sd->data, packet_sd, size); + } } return 0; |