Commit 3ec9e676 authored by Edward Hervey's avatar Edward Hervey
Browse files

ext/dv/: Added DEFAULT <==> BYTES, TIME conversions on srcpad,

Original commit message from CVS:
* ext/dv/Makefile.am:
* ext/dv/gstdvdemux.c: (gst_dvdemux_src_query), (gst_dvdemux_src_conver):
Added DEFAULT <==> BYTES, TIME conversions on srcpad,
Corrected the query function for position so it doesn't forget what
format was asked, and calls the conversion functions on the correct pad.
parent 05799a15
2005-10-04 Edward Hervey <edward@fluendo.com>
* ext/dv/Makefile.am:
* ext/dv/gstdvdemux.c: (gst_dvdemux_src_query), (gst_dvdemux_src_conver):
Added DEFAULT <==> BYTES, TIME conversions on srcpad,
Corrected the query function for position so it doesn't forget what
format was asked, and calls the conversion functions on the correct pad.
2005-10-03 Thomas Vander Stichele <thomas at apestaart dot org> 2005-10-03 Thomas Vander Stichele <thomas at apestaart dot org>
* configure.ac: * configure.ac:
......
plugin_LTLIBRARIES = libgstdv.la plugin_LTLIBRARIES = libgstdv.la
libgstdv_la_SOURCES = gstdv.c gstdvdec.c gstdvdemux.c libgstdv_la_SOURCES = gstdv.c gstdvdec.c gstdvdemux.c
libgstdv_la_CFLAGS = $(GST_CFLAGS) $(LIBDV_CFLAGS) libgstdv_la_CFLAGS = $(GST_CFLAGS) $(LIBDV_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
libgstdv_la_LIBADD = $(GST_BASE_LIBS) $(LIBDV_LIBS) libgstdv_la_LIBADD = $(GST_BASE_LIBS) $(LIBDV_LIBS) $(GST_PLUGINS_BASE_LIBS) -lgstaudio-@GST_MAJORMINOR@
libgstdv_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstdv_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
noinst_HEADERS = gstdvdemux.h gstdvdec.h noinst_HEADERS = gstdvdemux.h gstdvdec.h
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <string.h> #include <string.h>
#include <math.h> #include <math.h>
#include <gst/audio/audio.h>
#include "gstdvdemux.h" #include "gstdvdemux.h"
/* DV output has two modes, normal and wide. The resolution is the same in both /* DV output has two modes, normal and wide. The resolution is the same in both
...@@ -245,13 +246,18 @@ gst_dvdemux_src_convert (GstPad * pad, GstFormat src_format, gint64 src_value, ...@@ -245,13 +246,18 @@ gst_dvdemux_src_convert (GstPad * pad, GstFormat src_format, gint64 src_value,
goto done; goto done;
} }
GST_INFO ("src_value:%lld, src_format:%d, dest_format:%d", src_value,
src_format, *dest_format);
switch (src_format) { switch (src_format) {
case GST_FORMAT_BYTES: case GST_FORMAT_BYTES:
switch (*dest_format) { switch (*dest_format) {
case GST_FORMAT_BYTES:
*dest_value = src_value;
break;
case GST_FORMAT_DEFAULT: case GST_FORMAT_DEFAULT:
if (pad == dvdemux->videosrcpad)
*dest_value = src_value / dvdemux->frame_len;
else if (pad == dvdemux->audiosrcpad)
*dest_value = src_value / gst_audio_frame_byte_size (pad);
break;
case GST_FORMAT_TIME: case GST_FORMAT_TIME:
*dest_format = GST_FORMAT_TIME; *dest_format = GST_FORMAT_TIME;
if (pad == dvdemux->videosrcpad) if (pad == dvdemux->videosrcpad)
...@@ -275,10 +281,41 @@ gst_dvdemux_src_convert (GstPad * pad, GstFormat src_format, gint64 src_value, ...@@ -275,10 +281,41 @@ gst_dvdemux_src_convert (GstPad * pad, GstFormat src_format, gint64 src_value,
*dest_value = 2 * src_value * dvdemux->frequency * *dest_value = 2 * src_value * dvdemux->frequency *
dvdemux->channels / GST_SECOND; dvdemux->channels / GST_SECOND;
break; break;
case GST_FORMAT_TIME:
case GST_FORMAT_DEFAULT: case GST_FORMAT_DEFAULT:
*dest_format = GST_FORMAT_TIME; if (pad == dvdemux->videosrcpad) {
*dest_value = src_value; if (src_value)
*dest_value = src_value / (dvdemux->framerate * GST_SECOND);
else
*dest_value = 0;
} else if (pad == dvdemux->audiosrcpad)
*dest_value = 2 * src_value * dvdemux->frequency *
dvdemux->channels / (GST_SECOND *
gst_audio_frame_byte_size (pad));
break;
default:
res = FALSE;
}
break;
case GST_FORMAT_DEFAULT:
switch (*dest_format) {
case GST_FORMAT_TIME:
if (pad == dvdemux->videosrcpad) {
*dest_value = src_value * GST_SECOND * dvdemux->framerate;
} else if (pad == dvdemux->audiosrcpad) {
if (src_value)
*dest_value =
src_value * GST_SECOND * gst_audio_frame_byte_size (pad)
/ (2 * dvdemux->frequency * dvdemux->channels);
else
*dest_value = 0;
}
break;
case GST_FORMAT_BYTES:
if (pad == dvdemux->videosrcpad) {
*dest_value = src_value * dvdemux->frame_len;
} else if (pad == dvdemux->audiosrcpad) {
*dest_value = src_value * gst_audio_frame_byte_size (pad);
}
break; break;
default: default:
res = FALSE; res = FALSE;
...@@ -394,6 +431,7 @@ gst_dvdemux_src_query (GstPad * pad, GstQuery * query) ...@@ -394,6 +431,7 @@ gst_dvdemux_src_query (GstPad * pad, GstQuery * query)
case GST_QUERY_POSITION: case GST_QUERY_POSITION:
{ {
GstFormat format; GstFormat format;
GstFormat format2;
gint64 cur, end; gint64 cur, end;
GstPad *peer; GstPad *peer;
...@@ -415,8 +453,9 @@ gst_dvdemux_src_query (GstPad * pad, GstQuery * query) ...@@ -415,8 +453,9 @@ gst_dvdemux_src_query (GstPad * pad, GstQuery * query)
/* convert end to requested format */ /* convert end to requested format */
if (end != -1) { if (end != -1) {
if (!(res = gst_pad_query_convert (dvdemux->sinkpad, format2 = format;
GST_FORMAT_BYTES, end, &format, &end))) { if (!(res = gst_pad_query_convert (pad,
GST_FORMAT_BYTES, end, &format2, &end))) {
gst_object_unref (peer); gst_object_unref (peer);
goto error; goto error;
} }
...@@ -429,7 +468,6 @@ gst_dvdemux_src_query (GstPad * pad, GstQuery * query) ...@@ -429,7 +468,6 @@ gst_dvdemux_src_query (GstPad * pad, GstQuery * query)
if (!(res = gst_pad_query_convert (pad, if (!(res = gst_pad_query_convert (pad,
GST_FORMAT_TIME, dvdemux->timestamp, &format, &cur))) GST_FORMAT_TIME, dvdemux->timestamp, &format, &cur)))
goto error; goto error;
gst_query_set_position (query, format, cur, end); gst_query_set_position (query, format, cur, end);
break; break;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment