summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--ext/dv/gstdvdec.c12
-rw-r--r--ext/dv/gstdvdec.h5
3 files changed, 19 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 8073f050..2d728f96 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2004-10-18 Wim Taymans <wim@fluendo.com>
+
+ * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_video_getcaps),
+ (gst_dvdec_video_link), (gst_dvdec_push), (gst_dvdec_loop):
+ * ext/dv/gstdvdec.h:
+ Make sure we renegotiate aspect ratio when the camera switches.
+
2004-10-18 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
* ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
diff --git a/ext/dv/gstdvdec.c b/ext/dv/gstdvdec.c
index 2b538448..ea891585 100644
--- a/ext/dv/gstdvdec.c
+++ b/ext/dv/gstdvdec.c
@@ -400,6 +400,7 @@ gst_dvdec_init (GstDVDec * dvdec)
dvdec->height = 0;
dvdec->frequency = 0;
dvdec->channels = 0;
+ dvdec->wide = FALSE;
dvdec->drop_factor = 1;
dvdec->clamp_luma = FALSE;
@@ -771,7 +772,7 @@ gst_dvdec_video_getcaps (GstPad * pad)
gint par_x, par_y;
if (dvdec->PAL) {
- if (dv_format_wide (dvdec->decoder)) {
+ if (dvdec->wide) {
par_x = PAL_WIDE_PAR_X;
par_y = PAL_WIDE_PAR_Y;
} else {
@@ -779,7 +780,7 @@ gst_dvdec_video_getcaps (GstPad * pad)
par_y = PAL_NORMAL_PAR_Y;
}
} else {
- if (dv_format_wide (dvdec->decoder)) {
+ if (dvdec->wide) {
par_x = NTSC_WIDE_PAR_X;
par_y = NTSC_WIDE_PAR_Y;
} else {
@@ -882,6 +883,7 @@ gst_dvdec_loop (GstElement * element)
guint32 length, got_bytes;
GstClockTime ts, duration;
gdouble fps;
+ gboolean wide;
dvdec = GST_DVDEC (element);
@@ -912,6 +914,7 @@ gst_dvdec_loop (GstElement * element)
fps = (dvdec->PAL ? PAL_FRAMERATE : NTSC_FRAMERATE);
height = (dvdec->PAL ? PAL_HEIGHT : NTSC_HEIGHT);
length = (dvdec->PAL ? PAL_BUFFER : NTSC_BUFFER);
+ wide = dv_format_wide (dvdec->decoder);
if (length != dvdec->length) {
dvdec->length = length;
@@ -1002,9 +1005,11 @@ gst_dvdec_loop (GstElement * element)
}
dvdec->framecount = 0;
- if ((dvdec->framerate != fps) || (dvdec->height != height)) {
+ if ((dvdec->framerate != fps) || (dvdec->height != height)
+ || dvdec->wide != wide) {
dvdec->height = height;
dvdec->framerate = fps;
+ dvdec->wide = wide;
if (GST_PAD_LINK_FAILED (gst_pad_renegotiate (dvdec->videosrcpad))) {
GST_ELEMENT_ERROR (dvdec, CORE, NEGOTIATION, (NULL), (NULL));
@@ -1038,6 +1043,7 @@ gst_dvdec_loop (GstElement * element)
} else {
dvdec->height = height;
dvdec->framerate = fps;
+ dvdec->wide = wide;
}
end:
diff --git a/ext/dv/gstdvdec.h b/ext/dv/gstdvdec.h
index f606da1d..cf62c3fd 100644
--- a/ext/dv/gstdvdec.h
+++ b/ext/dv/gstdvdec.h
@@ -59,8 +59,9 @@ struct _GstDVDec {
gboolean PAL;
gdouble framerate;
gint height;
- gint frequency;
- gint channels;
+ gint frequency;
+ gint channels;
+ gboolean wide;
gint length;
gint framecount;