mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-23 06:26:23 +00:00
asf: Detect more payload extensions.
These should help fix interlaced/PAR issues with more files.
This commit is contained in:
parent
8905e8c81e
commit
61c00741a2
4 changed files with 42 additions and 1 deletions
|
@ -25,6 +25,11 @@ const ASFGuidHash asf_payload_ext_guids[] = {
|
||||||
{ASF_PAYLOAD_EXTENSION_DURATION, "ASF_PAYLOAD_EXTENSION_DURATION",
|
{ASF_PAYLOAD_EXTENSION_DURATION, "ASF_PAYLOAD_EXTENSION_DURATION",
|
||||||
{0xC6BD9450, 0x4907867F, 0x79C7A383, 0xAD33B721}
|
{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",
|
{ASF_PAYLOAD_EXTENSION_UNDEFINED, "ASF_PAYLOAD_EXTENSION_UNDEFINED",
|
||||||
{0, 0, 0, 0}
|
{0, 0, 0, 0}
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,7 +84,9 @@ typedef enum {
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
ASF_PAYLOAD_EXTENSION_UNDEFINED = 0,
|
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;
|
} AsfPayloadExtensionID;
|
||||||
|
|
||||||
extern const ASFGuidHash asf_payload_ext_guids[];
|
extern const ASFGuidHash asf_payload_ext_guids[];
|
||||||
|
|
|
@ -224,7 +224,31 @@ asf_payload_parse_replicated_data_extensions (AsfStream * stream,
|
||||||
GST_WARNING ("unexpected DURATION extensions len %u", ext->len);
|
GST_WARNING ("unexpected DURATION extensions len %u", ext->len);
|
||||||
}
|
}
|
||||||
break;
|
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:
|
default:
|
||||||
|
GST_WARNING ("UNKNOWN PAYLOAD EXTENSION !");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
off += ext->len;
|
off += ext->len;
|
||||||
|
@ -254,6 +278,11 @@ gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet,
|
||||||
|
|
||||||
payload.ts = GST_CLOCK_TIME_NONE;
|
payload.ts = GST_CLOCK_TIME_NONE;
|
||||||
payload.duration = 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 =
|
payload.mo_number =
|
||||||
asf_packet_read_varlen_int (packet->prop_flags, 4, p_data, p_size);
|
asf_packet_read_varlen_int (packet->prop_flags, 4, p_data, p_size);
|
||||||
|
|
|
@ -36,6 +36,11 @@ typedef struct {
|
||||||
guint8 rep_data[256]; /* the length should be stored in a byte */
|
guint8 rep_data[256]; /* the length should be stored in a byte */
|
||||||
GstClockTime ts;
|
GstClockTime ts;
|
||||||
GstClockTime duration; /* is not always available */
|
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;
|
GstBuffer *buf;
|
||||||
} AsfPayload;
|
} AsfPayload;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue