asf: Detect more payload extensions.

These should help fix interlaced/PAR issues with more files.
This commit is contained in:
Edward Hervey 2009-05-11 12:37:46 +02:00
parent 8905e8c81e
commit 61c00741a2
4 changed files with 42 additions and 1 deletions

View file

@ -25,6 +25,11 @@ const ASFGuidHash asf_payload_ext_guids[] = {
{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}
}

View file

@ -84,7 +84,9 @@ typedef enum {
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[];

View file

@ -224,7 +224,31 @@ asf_payload_parse_replicated_data_extensions (AsfStream * stream,
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;
@ -254,6 +278,11 @@ gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet,
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);

View file

@ -36,6 +36,11 @@ typedef struct {
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;