<p>Nobody say something? </p>
<div> </div>
<div class="gmail_quote">On Wed, Aug 17, 2011 at 9:50 AM, yahui liu <span dir="ltr"><<a href="mailto:yahuior@gmail.com" target="_blank">yahuior@gmail.com</a>></span> wrote:<br></div>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">
<div>IMSDK is my plugin. Attached vlc-log.txt. And following part is my code for playback.</div>
<div> </div>
<div>#define ENABLE_DECODE_H264 1<br>struct decoder_sys_t<br>{<br> sDecodeInputParams Params;<br>    mtime_t    i_pts;<br> bool    b_headerDecoded;</div>
<div> CDecodingPipeline* pPipeline; <br>};<br>static int  OpenDecoderH264 ( vlc_object_t *p_this );<br>static int  OpenDecoder  ( vlc_object_t *p_this, mfxU32 codecId );<br>static void CloseDecoder ( vlc_object_t *p_this );<br>
static void *DecodeBlock ( decoder_t *p_dec, block_t **pp_block );<br>vlc_module_begin ()<br>    set_category( CAT_INPUT )<br>    set_subcategory( SUBCAT_INPUT_VCODEC )<br> set_shortname( "IMSDK" )</div>
<div>#ifdef ENABLE_DECODE_H264<br> add_submodule ()<br>    set_description( N_("MSDK video decoder H264") )<br>    set_capability( "decoder", 100 )<br>    set_callbacks( OpenDecoderH264, CloseDecoder )<br>
 add_shortcut( "msdkdech264" )<br>#endif <br>vlc_module_end ()<br>static int OpenDecoderH264( vlc_object_t *p_this )<br>{<br> decoder_t *p_dec = (decoder_t *)p_this;<br> msg_Dbg ( p_dec, "IMSDK Open H264 Decoder (fourcc=%x, origfourcc=%x) (MSDK=%x, H264=%x, MPEG=%x)",<br>
    p_dec->fmt_in.i_codec, p_dec->fmt_in.i_original_fourcc,<br>    VLC_CODEC_MSDKH264, VLC_CODEC_H264, VLC_CODEC_MPGV);<br> return OpenDecoder( p_this, MFX_CODEC_AVC );<br>}<br>static int OpenDecoder( vlc_object_t *p_this, mfxU32 codecId )<br>
{<br>    decoder_t  *p_dec = (decoder_t *)p_this;<br>    decoder_sys_t *p_sys;<br> vlc_fourcc_t targetCodec; </div>
<div> if(MFX_CODEC_AVC == codecId)<br>  targetCodec = VLC_CODEC_H264;<br> else if(MFX_CODEC_MPEG2 == codecId)<br>  targetCodec = VLC_CODEC_MPGV;<br> else<br>  return VLC_EGENERIC;</div>
<div> if( p_dec->fmt_in.i_codec != targetCodec )<br>        return VLC_EGENERIC;</div>
<div>    // Allocate the memory needed to store the decoder's structure<br> if( ( p_dec->p_sys = p_sys =(decoder_sys_t *)calloc(sizeof(decoder_sys_t), 1) ) == NULL )<br>        return VLC_ENOMEM;<br> <br> // Skip decoder command line parsince, does not seem it is supported....<br>
 //<br> //   config_ChainParse( p_dec, DEC_CFG_PREFIX, ppsz_dec_options, p_dec->p_cfg );<br>// bool b_forcesw = var_GetBool( p_dec, DEC_CFG_PREFIX "forceswdec" );<br>// msg_Dbg ( p_dec, "IMSDK Open Decoder: force SW decode: %d", b_forcesw );</div>

<div><br> fp = fopen("stream.h264", "wb");</div>
<div><br> p_sys->b_headerDecoded = false;<br>    p_sys->i_pts = VLC_TS_INVALID;</div>
<div>    // Set output properties<br>    p_dec->fmt_out.i_cat = VIDEO_ES;</div>
<div> // NV12 would be preferred, but it looks like VLC does not fully support it.<br>#ifdef USE_NV12_FORMAT<br>    p_dec->fmt_out.i_codec = VLC_CODEC_NV12;<br>#else<br> p_dec->fmt_out.i_codec = VLC_CODEC_YV12; <br>
#endif<br> <br> // Set decoder frame plugin callback<br>    p_dec->pf_decode_video = (picture_t *(*)(decoder_t *, block_t **)) DecodeBlock;</div>
<div> // Create MSDK decode pipeline<br>    p_sys->pPipeline = new CDecodingPipeline; <br> if(p_sys->pPipeline)<br> {<br>  msg_Dbg ( p_dec, "IMSDK Open Decoder: decode pipeline created");</div>
<div>  //<br>  // Setup MSDK decoder parameters<br>  //<br>  p_sys->Params.videoType  = codecId;<br>#ifdef USE_D3D_SURFACE<br>  p_sys->Params.bd3dAlloc  = true;  // Use D3D surface for frame storage (currently not supported)<br>
#else<br>  p_sys->Params.bd3dAlloc  = false; // Use system memory for frame storage<br>#endif</div>
<div>#ifdef USE_MSDK_DECODE_HW<br>  p_sys->Params.bUseHWLib  = true;<br>#else<br>  p_sys->Params.bUseHWLib  = false;<br>#endif</div>
<div>  if(p_dec->fmt_out.i_codec == VLC_CODEC_NV12)<br>   p_sys->Params.nRequestedColorFormat = MFX_FOURCC_NV12;<br>  else if(p_dec->fmt_out.i_codec == VLC_CODEC_YV12)<br>   p_sys->Params.nRequestedColorFormat = MFX_FOURCC_YV12;</div>

<div><br>  // Initialize decode pipeline (just the first stage of init)<br>  mfxStatus sts = p_sys->pPipeline->Init(&(p_sys->Params), p_dec);<br>  msg_Dbg ( p_dec, "IMSDK Open Decoder:Init res=%d", sts);<br>
     <br>  if(MFX_ERR_NONE == sts)<br>   return VLC_SUCCESS;<br>  else<br>   return VLC_EGENERIC;<br> }<br> else<br> {<br>  msg_Dbg ( p_dec, "IMSDK Open Decoder: decode pipeline creation failed!");<br>  return VLC_ENOMEM;<br>
 }<br>}</div>
<div><br>//<br>// DecodeBlock:<br>//<br>static void *DecodeBlock( decoder_t *p_dec, block_t **pp_block )<br>{<br>    decoder_sys_t *p_sys  = p_dec->p_sys;<br>    block_t   *p_block;<br> picture_t  *p_pic;<br> mfxStatus  sts   = MFX_ERR_NONE;</div>

<div> <br> msg_Dbg ( p_dec, "IMSDK decoder Frame: p_dec data:");<br> msg_Dbg ( p_dec, "IMSDK decoder Frame: codecin=%x, codecout=%x (NV12=%x,YV12=%x,I420=%x)", p_dec->fmt_in.i_codec, p_dec->fmt_out.i_codec, VLC_CODEC_NV12, VLC_CODEC_YV12, VLC_CODEC_I420);</div>

<div> msg_Dbg ( p_dec, "IMSDK decoder Frame: IN: baserate=%d, rate=%d", p_dec->fmt_in.video.i_frame_rate_base, p_dec->fmt_in.video.i_frame_rate);<br> msg_Dbg ( p_dec, "IMSDK decoder Frame: IN: width=%d, height=%d", p_dec->fmt_in.video.i_width, p_dec->fmt_in.video.i_height);<br>
 msg_Dbg ( p_dec, "IMSDK decoder Frame: IN: chroma=%x", p_dec->fmt_in.video.i_chroma);<br> msg_Dbg ( p_dec, "IMSDK decoder Frame: IN: xoff=%d, yoff=%d", p_dec->fmt_in.video.i_x_offset, p_dec->fmt_in.video.i_y_offset);<br>
 msg_Dbg ( p_dec, "IMSDK decoder Frame: IN: viswidth=%d, visheight=%d", p_dec->fmt_in.video.i_visible_width, p_dec->fmt_in.video.i_visible_height);<br> msg_Dbg ( p_dec, "IMSDK decoder Frame: IN: bitrate=%d, profile=%d, level=%d", p_dec->fmt_in.i_bitrate, p_dec->fmt_in.i_profile, p_dec->fmt_in.i_level);<br>
 msg_Dbg ( p_dec, "IMSDK decoder Frame: IN: sarnum=%d, sarden=%d", p_dec->fmt_in.video.i_sar_num, p_dec->fmt_in.video.i_sar_den);</div>
<div> msg_Dbg ( p_dec, "IMSDK decoder Frame: IN: extrasize=%d, packed=%d", p_dec->fmt_in.i_extra, p_dec->fmt_in.b_packetized);</div>
<div> msg_Dbg ( p_dec, "IMSDK decoder Frame: OUT: baserate=%d, rate=%d", p_dec->fmt_out.video.i_frame_rate_base, p_dec->fmt_out.video.i_frame_rate);<br> msg_Dbg ( p_dec, "IMSDK decoder Frame: OUT: width=%d, height=%d", p_dec->fmt_out.video.i_width, p_dec->fmt_out.video.i_height);<br>
 msg_Dbg ( p_dec, "IMSDK decoder Frame: OUT: chroma=%x", p_dec->fmt_out.video.i_chroma);<br> msg_Dbg ( p_dec, "IMSDK decoder Frame: OUT: xoff=%d, yoff=%d", p_dec->fmt_out.video.i_x_offset, p_dec->fmt_out.video.i_y_offset);<br>
 msg_Dbg ( p_dec, "IMSDK decoder Frame: OUT: viswidth=%d, visheight=%d", p_dec->fmt_out.video.i_visible_width, p_dec->fmt_out.video.i_visible_height);<br> msg_Dbg ( p_dec, "IMSDK decoder Frame: OUT: bitrate=%d, profile=%d, level=%d", p_dec->fmt_out.i_bitrate, p_dec->fmt_out.i_profile, p_dec->fmt_out.i_level);<br>
 msg_Dbg ( p_dec, "IMSDK decoder Frame: OUT: sarnum=%d, sarden=%d", p_dec->fmt_out.video.i_sar_num, p_dec->fmt_out.video.i_sar_den);</div>
<div>    if( !pp_block || !*pp_block )<br>  return NULL;<br>    p_block = *pp_block;</div>
<div> fwrite(p_block->p_buffer, 1, p_block->i_buffer, fp);<br> </div>
<div>  if(false == p_sys->b_headerDecoded)<br> {<br>  sts = p_sys->pPipeline->InitHeader(p_block, p_dec);<br>  msg_Dbg ( p_dec, "IMSDK decoder:InitHeader res=%d---------------yahui", sts);</div>
<div>  if(MFX_ERR_NONE == sts)<br>  {<br>   // Header successfully processed<br>   p_sys->b_headerDecoded = true;</div>
<div>   // Initialize decoder (final init)<br>   sts = p_sys->pPipeline->InitDecoder(p_dec);<br>   msg_Dbg ( p_dec, "IMSDK decoder:InitDecoder res=%d", sts);<br> <br>  }<br>  else if(MFX_WRN_INCOMPATIBLE_VIDEO_PARAM == sts)<br>
  {<br>   // Header successfully processed (manual init)<br>   p_sys->b_headerDecoded = true;</div>
<div>   // Initialize decoder (final init)<br>   sts = p_sys->pPipeline->InitDecoder(p_dec);<br>   msg_Dbg ( p_dec, "IMSDK decoder:InitDecoder res=%d", sts);//res =5 for playback<br>   <br>   block_Release( *pp_block );<br>
   return NULL;<br>  }<br>  else<br>  {<br>   // At the moment I have found no way of stopping the decoder, VLC just continues to to ship data to<br>   // the plugin until the full media has been processed</div>
<div>   block_Release( *pp_block );<br>   return NULL;<br>  }<br> }<br> </div>
<div> //<br> // Process frame<br> //</div>
<div>#ifdef USE_NV12_FORMAT<br> p_dec->fmt_out.i_codec = VLC_CODEC_NV12;<br>#else<br> p_dec->fmt_out.i_codec = VLC_CODEC_YV12;  <br>#endif</div>
<div> // Initializations required for plyback case<br> p_dec->fmt_out.video.i_width = p_dec->fmt_in.video.i_width;<br> p_dec->fmt_out.video.i_height = p_dec->fmt_in.video.i_height;<br> p_dec->fmt_out.video.i_visible_width = p_dec->fmt_in.video.i_visible_width;<br>
 p_dec->fmt_out.video.i_visible_height = p_dec->fmt_in.video.i_visible_height;<br> p_dec->fmt_out.video.i_x_offset = p_dec->fmt_in.video.i_x_offset;<br> p_dec->fmt_out.video.i_y_offset = p_dec->fmt_in.video.i_y_offset;<br>
 p_dec->fmt_out.video.i_sar_num = p_dec->fmt_in.video.i_sar_num;<br> p_dec->fmt_out.video.i_sar_den = p_dec->fmt_in.video.i_sar_den;<br> p_dec->fmt_out.video.i_frame_rate = p_dec->fmt_in.video.i_frame_rate;<br>
 p_dec->fmt_out.video.i_frame_rate_base = p_dec->fmt_in.video.i_frame_rate_base;<br> // ...<br> <br> *pp_block = NULL; // To avoid being fed the same packet again</div>
<div><br> p_pic = decoder_NewPicture( p_dec );<br> //p_pic = picture_NewFromFormat ()<br> if( !p_pic )<br>  return NULL;</div>
<div> msg_Dbg ( p_dec, "IMSDK decoder Frame: PIC: width=%d, height=%d", p_pic->format.i_width, p_pic->format.i_height);<br> msg_Dbg ( p_dec, "IMSDK decoder Frame: PIC: chroma=%x, refs=%d, planes=%d", p_pic->format.i_chroma, p_pic->i_refcount, p_pic->i_planes);<br>
 msg_Dbg ( p_dec, "IMSDK decoder Frame: PIC: xoff=%d, yoff=%d", p_pic->format.i_x_offset, p_pic->format.i_y_offset);<br> msg_Dbg ( p_dec, "IMSDK decoder Frame: PIC: viswidth=%d, visheight=%d", p_pic->format.i_visible_width, p_pic->format.i_visible_height);<br>
 msg_Dbg ( p_dec, "IMSDK decoder Frame: PIC: bitrate=%d, profile=%d, level=%d", p_dec->fmt_in.i_bitrate, p_dec->fmt_in.i_profile, p_dec->fmt_in.i_level);</div>
<div><br> // Time stamp management<br> if( p_block->i_pts > VLC_TS_INVALID )<br>        p_sys->i_pts = p_block->i_pts;<br>    else if( p_block->i_dts > VLC_TS_INVALID )<br>        p_sys->i_pts = p_block->i_dts;</div>

<div> p_pic->date = p_sys->i_pts;</div>
<div><br> msg_Dbg ( p_dec, "IMSDK decoder Frame: pts:%d (%d) dts:%d tlen:%d rate:%d bufsize:%d flags:%x",<br>     p_block->i_pts, p_sys->i_pts, p_block->i_dts, p_block->i_length,<br>     p_block->i_rate, p_block->i_buffer, p_block->i_flags);</div>

<div> </div>
<div> // Decode the frame<br> sts = p_sys->pPipeline->RunDecodeFrame(p_dec, &p_pic, p_block);<br> msg_Dbg ( p_dec, "IMSDK decoder Frame: pPipeline->RunDecode:sts=%d", sts);</div>
<div> if( p_block )<br>            block_Release( p_block );</div>
<div> if(MFX_ERR_NONE != sts)<br> {<br>  decoder_DeletePicture(p_dec, p_pic);<br>  return NULL;<br> }<br> else<br> {<br>  // Successful decoding, return buffer<br>  return p_pic;<br> }<br>}</div>
<div> </div>
<div>//<br>// CloseDecoder: <br>//<br>static void CloseDecoder( vlc_object_t *p_this )<br>{<br>    decoder_t  *p_dec = (decoder_t *)p_this;<br>    decoder_sys_t *p_sys = p_dec->p_sys;</div>
<div> p_sys->pPipeline->Close();</div>
<div>    delete p_sys->pPipeline;<br>    free( p_sys );</div>
<div> fclose(fp);</div>
<div> msg_Dbg ( p_dec, "MSDK DEC END!");<br>}</div>
<div>Best,<br><br></div>
<div>
<div></div>
<div>
<div class="gmail_quote">On Wed, Aug 17, 2011 at 6:00 AM, Jean-Baptiste Kempf <span dir="ltr"><<a href="mailto:jb@videolan.org" target="_blank">jb@videolan.org</a>></span> wrote:<br>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">On Tue, Aug 16, 2011 at 04:50:32PM -0700, yahui liu wrote :<br>
<div>> Does anyone have ideas or suggestions about this issue?<br><br></div>Please share logs or code; or both.<br><br>Best Regards,<br><font color="#888888"><br>--<br>Jean-Baptiste Kempf<br><a href="http://www.jbkempf.com/" target="_blank">http://www.jbkempf.com/</a> - <a href="tel:%2B33%20672%20704%20734" target="_blank" value="+33672704734">+33 672 704 734</a><br>
Sent from my Electronic Device<br>_______________________________________________<br>vlc-devel mailing list<br>To unsubscribe or modify your subscription options:<br><a href="http://mailman.videolan.org/listinfo/vlc-devel" target="_blank">http://mailman.videolan.org/listinfo/vlc-devel</a><br>
</font></blockquote></div><br></div></div></blockquote><br>