found another issue: in gstreamer-codec-parser, not all case we get the
converted scanning order , please review the following code in
“gst-libs/gst/codecparsers/gstmpegvideoparser.c”, If no matrix contained in
bitstream, default zig-zag matrix will be loaded. In two case , we get
different types of order.
gst-libs/gst/codecparsers/gstmpegvideoparser.c
/* default intra quant matrix, in zig-zag order */
static const guint8 default_intra_quantizer_matrix[64] = {
8,
16, 16,
19, 16, 19,
22, 22, 22, 22,
22, 22, 26, 24, 26,
27, 27, 27, 26, 26, 26,
26, 27, 27, 27, 29, 29, 29,
34, 34, 34, 29, 29, 29, 27, 27,
29, 29, 32, 32, 34, 34, 37,
38, 37, 35, 35, 34, 35,
38, 38, 40, 40, 40,
48, 48, 46, 46,
56, 56, 58,
69, 69,
83
};
/* load_intra_quantiser_matrix */
READ_UINT8 (&br, load_intra_flag, 1);
if (load_intra_flag) {
gint i;
for (i = 0; i < 64; i++)
READ_UINT8 (&br, seqhdr->intra_quantizer_matrix[mpeg_zigzag_8x8[i]], 8);
//case 1. Here seqhdr->intra_quantizer_matrix is filled with scan order matrix
} else
memcpy (seqhdr->intra_quantizer_matrix, default_intra_quantizer_matrix,
64); //case 2. Here seqhdr->intra_quantizer_matrix is filled with zig-zaged
order matrix
Thanks,
Xiaowei
From: Li, Jocelyn
Sent: Thursday, January 31, 2013 12:28 PM
To: Yuan, Feng; Beauchesne, Gwenole; Xiang, Haihao; Li, Xiaowei A
Cc: Zhao, Halley; Zhong, CongX;
[email protected]<mailto:[email protected]>
Subject: RE: [Bug 58176] [gst-vaapi] gi4_video.bits decoding failed (MPEG2)
Added Xiaowei.
From: Yuan, Feng
Sent: Thursday, January 31, 2013 11:09 AM
To: Li, Jocelyn; Beauchesne, Gwenole; Xiang, Haihao
Cc: Zhao, Halley; Zhong, CongX;
[email protected]<mailto:[email protected]>
Subject: RE: [Bug 58176] [gst-vaapi] gi4_video.bits decoding failed (MPEG2)
Copy to libva maillist, it’s more about
gstreamer-codec-parser/gst-vaapi/libva/driver related issues.
Hi all,
It’s an issue about how to process the zigzagged quantization table
between gstreamer level and driver level.
Libva defined API of
typedef struct _VAIQMatrixBufferMPEG2
{
int load_intra_quantiser_matrix;
int load_non_intra_quantiser_matrix;
int load_chroma_intra_quantiser_matrix;
int load_chroma_non_intra_quantiser_matrix;
unsigned char intra_quantiser_matrix[64];
unsigned char non_intra_quantiser_matrix[64];
unsigned char chroma_intra_quantiser_matrix[64];
unsigned char chroma_non_intra_quantiser_matrix[64];
} VAIQMatrixBufferMPEG2;
Question is how to fill <xxx_intra_quantiser_matrix>, is it zigzag
ordered or scan ordered? Mpeg2 data store the quantization table in zigzag
order. Currently gstreamer-codec-parser would parse all zigzagged quantization
table from MPEG2 data and converting into scanning order. Intel-Driver would
do the same thing again. The result certainly would be incorrect.
Ffmpeg would fill the quantiser_matrix by zigzag order, do we need to
change gstreamer-codec-parse to read data into zigzag order? Does any other
package/lib already using gstreamer-codec-parser(mpeg2)? Which package should
be the right role to do the conversion from zigzag to scanning order?
Thanks,
Wind
_______________________________________________
Libva mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libva