|
|
@@ -19,6 +19,8 @@ |
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
|
|
|
*/ |
|
|
|
|
|
|
|
#include "libavutil/stereo3d.h" |
|
|
|
|
|
|
|
#include "avcodec.h" |
|
|
|
#include "bytestream.h" |
|
|
|
#include "huffyuvencdsp.h" |
|
|
@@ -233,6 +235,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, |
|
|
|
const AVFrame *pict, int *got_packet) |
|
|
|
{ |
|
|
|
PNGEncContext *s = avctx->priv_data; |
|
|
|
AVFrameSideData *side_data; |
|
|
|
const AVFrame *const p = pict; |
|
|
|
int bit_depth, color_type, y, len, row_size, ret, is_progressive; |
|
|
|
int bits_per_pixel, pass_row_size, enc_row_size, max_packet_size; |
|
|
@@ -371,6 +374,25 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/* write stereoscopic information */ |
|
|
|
side_data = av_frame_get_side_data(pict, AV_FRAME_DATA_STEREO3D); |
|
|
|
if (side_data) { |
|
|
|
AVStereo3D *stereo3d = (AVStereo3D *)side_data->data; |
|
|
|
uint8_t sm; |
|
|
|
switch (stereo3d->type) { |
|
|
|
case AV_STEREO3D_SIDEBYSIDE: |
|
|
|
sm = !(stereo3d->flags & AV_STEREO3D_FLAG_INVERT); |
|
|
|
png_write_chunk(&s->bytestream, MKTAG('s', 'T', 'E', 'R'), &sm, 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; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/* now put each row */ |
|
|
|
s->zstream.avail_out = IOBUF_SIZE; |
|
|
|
s->zstream.next_out = s->buf; |
|
|
|