Original commit message from CVS:
Added pad_query with percent format on filesrc and some constants
*value = src->filelen;
break;
case GST_PAD_QUERY_POSITION:
- if (*format != GST_FORMAT_BYTES) {
- return FALSE;
+ switch (*format) {
+ case GST_FORMAT_BYTES:
+ *value = src->curoffset;
+ break;
+ case GST_FORMAT_PERCENT:
+ if (src->filelen == 0)
+ return FALSE;
+ *value = src->curoffset * GST_FORMAT_PERCENT_MAX / src->filelen;
+ break;
+ default:
+ return FALSE;
}
- *value = src->curoffset;
break;
default:
return FALSE;
GST_FORMAT_UNITS = 6
} GstFormat;
+/* a percentage is always relative to 1000000 */
+#define GST_FORMAT_PERCENT_MAX 1000000LL
+#define GST_FORMAT_PERCENT_SCALE 10000LL
+
typedef struct _GstFormatDefinition GstFormatDefinition;
struct _GstFormatDefinition
*value = src->filelen;
break;
case GST_PAD_QUERY_POSITION:
- if (*format != GST_FORMAT_BYTES) {
- return FALSE;
+ switch (*format) {
+ case GST_FORMAT_BYTES:
+ *value = src->curoffset;
+ break;
+ case GST_FORMAT_PERCENT:
+ if (src->filelen == 0)
+ return FALSE;
+ *value = src->curoffset * GST_FORMAT_PERCENT_MAX / src->filelen;
+ break;
+ default:
+ return FALSE;
}
- *value = src->curoffset;
break;
default:
return FALSE;