These should help fix interlaced/PAR issues with more files.
{ASF_PAYLOAD_EXTENSION_DURATION, "ASF_PAYLOAD_EXTENSION_DURATION",
{0xC6BD9450, 0x4907867F, 0x79C7A383, 0xAD33B721}
},
+ {ASF_PAYLOAD_EXTENSION_SYSTEM_CONTENT, "ASF_PAYLOAD_EXTENSION_SYSTEM_CONTENT",
+ {0xD590DC20, 0x436C07BC, 0xBBF3f79C, 0xDCA4F1FB}},
+ {ASF_PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO,
+ "ASF_PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO",
+ {0x1b1ee554, 0x4bc8f9ea, 0x6b371a82, 0xb8c4e474}},
{ASF_PAYLOAD_EXTENSION_UNDEFINED, "ASF_PAYLOAD_EXTENSION_UNDEFINED",
{0, 0, 0, 0}
}
typedef enum {
ASF_PAYLOAD_EXTENSION_UNDEFINED = 0,
- ASF_PAYLOAD_EXTENSION_DURATION
+ ASF_PAYLOAD_EXTENSION_DURATION,
+ ASF_PAYLOAD_EXTENSION_SYSTEM_CONTENT,
+ ASF_PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO
} AsfPayloadExtensionID;
extern const ASFGuidHash asf_payload_ext_guids[];
GST_WARNING ("unexpected DURATION extensions len %u", ext->len);
}
break;
+ case ASF_PAYLOAD_EXTENSION_SYSTEM_CONTENT:
+ if (ext->len == 1) {
+ guint8 data = payload->rep_data[off];
+
+ payload->interlaced = data & 0x1;
+ payload->rff = data & 0x8;
+ payload->tff = (data & 0x2) || !(data & 0x4);
+ GST_WARNING ("data:0x%x, interlaced:%d, rff:%d, tff:%d",
+ data, payload->interlaced, payload->rff, payload->tff);
+ } else {
+ GST_WARNING ("unexpected SYSTEM_CONTE extensions len %u", ext->len);
+ }
+ break;
+ case ASF_PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO:
+ if (ext->len == 2) {
+ payload->par_x = payload->rep_data[off];
+ payload->par_y = payload->rep_data[off + 1];
+ GST_WARNING ("PAR %d / %d", payload->par_x, payload->par_y);
+ } else {
+ GST_WARNING ("unexpected SYSTEM_PIXEL_ASPECT_RATIO extensions len %u",
+ ext->len);
+ }
+ break;
default:
+ GST_WARNING ("UNKNOWN PAYLOAD EXTENSION !");
break;
}
off += ext->len;
payload.ts = GST_CLOCK_TIME_NONE;
payload.duration = GST_CLOCK_TIME_NONE;
+ payload.par_x = 0;
+ payload.par_y = 0;
+ payload.interlaced = FALSE;
+ payload.tff = FALSE;
+ payload.rff = FALSE;
payload.mo_number =
asf_packet_read_varlen_int (packet->prop_flags, 4, p_data, p_size);
guint8 rep_data[256]; /* the length should be stored in a byte */
GstClockTime ts;
GstClockTime duration; /* is not always available */
+ guint8 par_x; /* not always available (0:deactivated) */
+ guint8 par_y; /* not always available (0:deactivated) */
+ gboolean interlaced; /* default: FALSE */
+ gboolean tff;
+ gboolean rff;
GstBuffer *buf;
} AsfPayload;