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

Reply via email to