[vlc-devel] [PATCH 5/9] avcodec: retrieve decoded 3D stereo format if available
Felix Abecassis
felix.abecassis at gmail.com
Fri Aug 8 20:13:30 CEST 2014
---
modules/codec/avcodec/video.c | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c
index d1fa89b..9e0a7c9 100644
--- a/modules/codec/avcodec/video.c
+++ b/modules/codec/avcodec/video.c
@@ -38,6 +38,7 @@
#include <libavcodec/avcodec.h>
#include <libavutil/mem.h>
#include <libavutil/pixdesc.h>
+#include <libavutil/stereo3d.h>
#include "avcodec.h"
#include "va.h"
@@ -368,6 +369,7 @@ int InitVideoDec( decoder_t *p_dec, AVCodecContext *p_context,
p_dec->fmt_out.i_codec = p_dec->fmt_out.video.i_chroma;
p_dec->fmt_out.video.orientation = p_dec->fmt_in.video.orientation;
+ p_dec->fmt_out.video.stereo_format = p_dec->fmt_in.video.stereo_format;
if( p_dec->fmt_in.video.p_palette ) {
p_sys->palette_sent = false;
@@ -711,6 +713,30 @@ picture_t *DecodeVideo( decoder_t *p_dec, block_t **pp_block )
}
}
+ /* Forward the 3D stereo format in case it changed (e.g. modified by the packetizer) */
+ if( p_dec->fmt_in.video.stereo_format.mode )
+ p_dec->fmt_out.video.stereo_format = p_dec->fmt_in.video.stereo_format;
+
+ AVFrameSideData *side_data = av_frame_get_side_data( p_sys->p_ff_pic, AV_FRAME_DATA_STEREO3D );
+ if( side_data )
+ {
+ AVStereo3D *stereo_format = (AVStereo3D*)side_data->data;
+ vlc_stereo3d_mode stereo_mode;
+ switch (stereo_format->type)
+ {
+ case AV_STEREO3D_SIDEBYSIDE: stereo_mode = VLC_STEREO3D_SBS; break;
+ case AV_STEREO3D_TOPBOTTOM: stereo_mode = VLC_STEREO3D_TB; break;
+ case AV_STEREO3D_FRAMESEQUENCE: stereo_mode = VLC_STEREO3D_FRAME; break;
+ case AV_STEREO3D_LINES: stereo_mode = VLC_STEREO3D_ROW; break;
+ case AV_STEREO3D_COLUMNS: stereo_mode = VLC_STEREO3D_COL; break;
+ default: stereo_mode = VLC_STEREO3D_2D; break;
+ }
+ p_dec->fmt_out.video.stereo_format.mode = stereo_mode;
+
+ if( stereo_format->flags == AV_STEREO3D_FLAG_INVERT )
+ p_dec->fmt_out.video.stereo_format.flags = VLC_STEREO3D_SWAP_EYES;
+ }
+
/* Send decoded frame to vout */
if( i_pts > VLC_TS_INVALID)
{
--
1.9.1
More information about the vlc-devel
mailing list