vlc | branch: master | Julian Scheel <[email protected]> | Thu Oct 9 16:52:14 2014 +0200| [21cfe456ed48b7c1592380e16d6c50a390d2c05c] | committer: Jean-Baptiste Kempf
mmal/codec: Set progressive flag on frames Query the interlace type from the mmal decoder on format change and pass it through to vlc_pictures. Signed-off-by: Julian Scheel <[email protected]> Signed-off-by: Jean-Baptiste Kempf <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=21cfe456ed48b7c1592380e16d6c50a390d2c05c --- modules/hw/mmal/codec.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/modules/hw/mmal/codec.c b/modules/hw/mmal/codec.c index 73757a3..26e03e1 100644 --- a/modules/hw/mmal/codec.c +++ b/modules/hw/mmal/codec.c @@ -75,6 +75,9 @@ struct decoder_sys_t { MMAL_ES_FORMAT_T *output_format; MMAL_QUEUE_T *decoded_pictures; vlc_mutex_t mutex; + + bool b_top_field_first; + bool b_progressive; }; /* Utilities */ @@ -290,6 +293,7 @@ static void CloseDecoder(decoder_t *dec) static int change_output_format(decoder_t *dec) { + MMAL_PARAMETER_VIDEO_INTERLACE_TYPE_T interlace_type; decoder_sys_t *sys = dec->p_sys; MMAL_STATUS_T status; int pool_size; @@ -360,6 +364,19 @@ static int change_output_format(decoder_t *dec) dec->fmt_out.video.i_frame_rate = sys->output->format->es->video.frame_rate.num; dec->fmt_out.video.i_frame_rate_base = sys->output->format->es->video.frame_rate.den; + /* Query interlaced type */ + interlace_type.hdr.id = MMAL_PARAMETER_VIDEO_INTERLACE_TYPE; + interlace_type.hdr.size = sizeof(MMAL_PARAMETER_VIDEO_INTERLACE_TYPE_T); + status = mmal_port_parameter_get(sys->output, &interlace_type.hdr); + if (status != MMAL_SUCCESS) { + msg_Warn(dec, "Failed to query interlace type from decoder output port (status=%"PRIx32" %s)", + status, mmal_status_to_string(status)); + } else { + sys->b_progressive = (interlace_type.eMode == MMAL_InterlaceProgressive); + sys->b_top_field_first = sys->b_progressive ? + (interlace_type.eMode == MMAL_InterlaceFieldsInterleavedUpperFirst) : false; + msg_Dbg(dec, "Detected %s video", sys->b_progressive ? "progressive" : "interlaced"); + } out: mmal_format_free(sys->output_format); @@ -474,6 +491,8 @@ static picture_t *decode(decoder_t *dec, block_t **pblock) if (buffer) { ret = (picture_t *)buffer->user_data; ret->date = buffer->pts; + ret->b_progressive = sys->b_progressive; + ret->b_top_field_first = sys->b_top_field_first; mmal_buffer_header_reset(buffer); mmal_buffer_header_release(buffer); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
