summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libmpeg2/decode.c10
-rw-r--r--src/libmpeg2/mpeg2.h1
-rw-r--r--src/libmpeg2/xine_decoder.c12
3 files changed, 16 insertions, 7 deletions
diff --git a/src/libmpeg2/decode.c b/src/libmpeg2/decode.c
index 372afd403..4ce672022 100644
--- a/src/libmpeg2/decode.c
+++ b/src/libmpeg2/decode.c
@@ -395,6 +395,7 @@ static inline int parse_chunk (mpeg2dec_t * mpeg2dec, int code,
data.width = picture->coded_picture_width;
data.height = picture->coded_picture_height;
data.aspect = picture->aspect_ratio_information;
+ data.pan_scan = mpeg2dec->force_pan_scan;
xine_event_send(mpeg2dec->stream, &event);
mpeg2dec->stream->stream_info[XINE_STREAM_INFO_VIDEO_WIDTH]
@@ -453,6 +454,9 @@ static inline int parse_chunk (mpeg2dec_t * mpeg2dec, int code,
else
mpeg2dec->drop_frame = 1;
} else {
+ int flags = VO_INTERLACED_FLAG | picture->picture_structure;
+ if (mpeg2dec->force_pan_scan) flags |= VO_PAN_SCAN_FLAG;
+
if ( picture->current_frame &&
picture->current_frame != picture->backward_reference_frame &&
picture->current_frame != picture->forward_reference_frame ) {
@@ -482,7 +486,7 @@ static inline int parse_chunk (mpeg2dec_t * mpeg2dec, int code,
picture->coded_picture_height,
ratio,
XINE_IMGFMT_YV12,
- VO_INTERLACED_FLAG | picture->picture_structure);
+ flags);
else {
picture->current_frame =
mpeg2dec->stream->video_out->get_frame (mpeg2dec->stream->video_out,
@@ -490,7 +494,7 @@ static inline int parse_chunk (mpeg2dec_t * mpeg2dec, int code,
picture->coded_picture_height,
ratio,
XINE_IMGFMT_YV12,
- (VO_INTERLACED_FLAG | VO_PREDICTION_FLAG | picture->picture_structure));
+ flags);
if (picture->forward_reference_frame &&
picture->forward_reference_frame != picture->backward_reference_frame)
picture->forward_reference_frame->free (picture->forward_reference_frame);
@@ -804,6 +808,7 @@ void mpeg2_find_sequence_header (mpeg2dec_t * mpeg2dec,
data.width = picture->coded_picture_width;
data.height = picture->coded_picture_height;
data.aspect = picture->aspect_ratio_information;
+ data.pan_scan = mpeg2dec->force_pan_scan;
xine_event_send(mpeg2dec->stream, &event);
mpeg2dec->stream->stream_info[XINE_STREAM_INFO_VIDEO_WIDTH]
@@ -852,6 +857,7 @@ static void process_userdata(mpeg2dec_t *mpeg2dec, uint8_t *buffer)
data.width = mpeg2dec->picture->coded_picture_width;
data.height = mpeg2dec->picture->coded_picture_height;
data.aspect = mpeg2dec->picture->aspect_ratio_information;
+ data.pan_scan = mpeg2dec->force_pan_scan;
xine_event_send(mpeg2dec->stream, &event);
mpeg2dec->stream->stream_info[XINE_STREAM_INFO_VIDEO_WIDTH]
diff --git a/src/libmpeg2/mpeg2.h b/src/libmpeg2/mpeg2.h
index bb3ef96d5..2fdbacdce 100644
--- a/src/libmpeg2/mpeg2.h
+++ b/src/libmpeg2/mpeg2.h
@@ -45,6 +45,7 @@ typedef struct mpeg2dec_s {
int64_t pts;
uint32_t rff_pattern;
int force_aspect;
+ int force_pan_scan;
xine_stream_t *stream;
diff --git a/src/libmpeg2/xine_decoder.c b/src/libmpeg2/xine_decoder.c
index 073ed47e7..7b1313e85 100644
--- a/src/libmpeg2/xine_decoder.c
+++ b/src/libmpeg2/xine_decoder.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: xine_decoder.c,v 1.48 2003/08/04 03:47:09 miguelfreitas Exp $
+ * $Id: xine_decoder.c,v 1.49 2003/08/05 15:09:23 mroi Exp $
*
* stuff needed to turn libmpeg2 into a xine decoder plugin
*/
@@ -63,9 +63,11 @@ static void mpeg2dec_decode_data (video_decoder_t *this_gen, buf_element_t *buf)
if (buf->decoder_flags & BUF_FLAG_SPECIAL) {
if (buf->decoder_info[1] == BUF_SPECIAL_ASPECT) {
this->mpeg2.force_aspect = buf->decoder_info[2];
- if (buf->decoder_info[3] == 0x1 && buf->decoder_info[2] == XINE_VO_ASPECT_ANAMORPHIC)
- /* letterboxing is denied, we have to do pan&scan */
- this->mpeg2.force_aspect = XINE_VO_ASPECT_PAN_SCAN;
+ if (buf->decoder_info[3] == 0x1 && buf->decoder_info[2] == 3)
+ /* letterboxing is denied, we have to do pan&scan */
+ this->mpeg2.force_pan_scan = 1;
+ else
+ this->mpeg2.force_pan_scan = 0;
}
return;
}
@@ -137,7 +139,7 @@ static video_decoder_t *open_plugin (video_decoder_class_t *class_gen, xine_stre
mpeg2_init (&this->mpeg2);
stream->video_out->open(stream->video_out, stream);
- this->mpeg2.force_aspect = 0;
+ this->mpeg2.force_aspect = this->mpeg2.force_pan_scan = 0;
return &this->video_decoder;
}