summaryrefslogtreecommitdiff
path: root/libavcodec/pngenc.c
diff options
context:
space:
mode:
authorKirill Gavrilov <kirill@sview.ru>2015-10-22 23:36:52 +0300
committerMichael Niedermayer <michael@niedermayer.cc>2015-10-28 12:59:43 +0100
commitbea931c2eb776603074c463e127cb348d195bde7 (patch)
treeb860ca49096ee3ace2b6d8305689a99038a60a63 /libavcodec/pngenc.c
parent54cd1ab55513e0a12f90dba8036b0a54b16d8ff7 (diff)
avcodec/png: read and write stereo3d frame side data information
Use optional sTER chunk defining side-by-side stereo pair within "Extensions to the PNG 1.2 Specification", version 1.3.0. Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavcodec/pngenc.c')
-rw-r--r--libavcodec/pngenc.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/libavcodec/pngenc.c b/libavcodec/pngenc.c
index 4204df2a30..bc61f8fd77 100644
--- a/libavcodec/pngenc.c
+++ b/libavcodec/pngenc.c
@@ -31,6 +31,7 @@
#include "libavutil/libm.h"
#include "libavutil/opt.h"
#include "libavutil/color_utils.h"
+#include "libavutil/stereo3d.h"
#include <zlib.h>
@@ -340,6 +341,7 @@ static int png_get_gama(enum AVColorTransferCharacteristic trc, uint8_t *buf)
static int encode_headers(AVCodecContext *avctx, const AVFrame *pict)
{
+ AVFrameSideData *side_data;
PNGEncContext *s = avctx->priv_data;
/* write png header */
@@ -364,6 +366,23 @@ static int encode_headers(AVCodecContext *avctx, const AVFrame *pict)
}
png_write_chunk(&s->bytestream, MKTAG('p', 'H', 'Y', 's'), s->buf, 9);
+ /* write stereoscopic information */
+ side_data = av_frame_get_side_data(pict, AV_FRAME_DATA_STEREO3D);
+ if (side_data) {
+ AVStereo3D *stereo3d = (AVStereo3D *)side_data->data;
+ switch (stereo3d->type) {
+ case AV_STEREO3D_SIDEBYSIDE:
+ s->buf[0] = ((stereo3d->flags & AV_STEREO3D_FLAG_INVERT) == 0) ? 1 : 0;
+ png_write_chunk(&s->bytestream, MKTAG('s', 'T', 'E', 'R'), s->buf, 1);
+ break;
+ case AV_STEREO3D_2D:
+ break;
+ default:
+ av_log(avctx, AV_LOG_WARNING, "Only side-by-side stereo3d flag can be defined within sTER chunk\n");
+ break;
+ }
+ }
+
/* write colorspace information */
if (pict->color_primaries == AVCOL_PRI_BT709 &&
pict->color_trc == AVCOL_TRC_IEC61966_2_1) {