mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-22 22:16:22 +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",
|
||||
{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}
|
||||
}
|
||||
|
|
|
@ -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[];
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue