Keith:
 
now, I found my decoder is decoding the stream data so slow.
 
For example, a TV Ad plays only during 1 minite,so it just includes 60*30 
frames. but my deocder play it about one frame per second, so need 60*30 
seconds to play it. and it does not drop frame! I do not know the reason. 
why it do not drop frame  to fit real time playing? how to drop frame forcely?
 
But with the same PC, I can play mpeg2 file correctly. 
 
 
 

在2007-04-25,"Keith Winstein" <[EMAIL PROTECTED]> 写道:

Allison,



It would be very difficult to help you debug this without a sample of the 

data you're trying to decode.



If I had to guess, it would be that you are getting a transport stream, 

because presumably audio is present as well. Such a stream will need to be 

demultiplexed before you can send the MPEG-2 Video elementary stream to 

libmpeg2. See mpeg2dec.c for an example of how to do this.



Again, that is just a guess. If you really want our help, you will have to 

save a sample of the stream to a file and then let us examine it.



-Keith



On Wed, 25 Apr 2007, hdzhang wrote:



> Keith,

>

> I am decoding real-time mpeg2 data, not mpeg file. so I can not provide the 
> mpeg2 file.

>

> and I package libmpeg2 codec into windows dirctshow filter, and source code 
> as follows:

>

> The Transform function is recall repeatly under real time capture stream data.

>

> It can decoder mpeg2 file correctly ,but real-time data wrong.

>

> HRESULT CMPEG2Decomp::Transform(IMediaSample *pIn, IMediaSample *pOut)

> {

>    BYTE *pBufferIn, *pBufferOut;

>    long inputLen = pIn->GetActualDataLength();

>    HRESULT hr = pIn->GetPointer(&pBufferIn);//pBufferIn is mpeg2 data input. 
> it includes header data or one frame data or multi-frame data.

>    hr = pOut->GetPointer(&pBufferOut);//pBufferOut is output data

>    do

>   {

>        state = mpeg2_parse (decoder);

>        sequence = info->sequence;

>        //bMem:  0--memory is uncopied

>        //             1--memory is copied

>        //             2--need read new  memory data

>        //

>        switch (state)

>        {

>            case STATE_BUFFER:

>                     if(bMem==1)

>                          bMem=2;

>                     if(bMem==0)

>                     {

>                          memcpy(buffer,pBufferIn,inputLen);

>                          bMem=1;

>                          mpeg2_buffer (decoder, buffer, buffer + inputLen);

>                     }

>                     break;

>            case STATE_SEQUENCE:

>                     mpeg2_custom_fbuf (decoder, 1);

>                     for (i = 0; i < 3; i++)

>                     {

>                          fbuf[i].mbuf[0] = (uint8_t *) malloc 
> (info->sequence->width*info->sequence->height + 15);

>                          fbuf[i].mbuf[1] = (uint8_t *) malloc 
> (info->sequence->chroma_width*info->sequence->chroma_height + 15);

>                          fbuf[i].mbuf[2] = (uint8_t *) malloc 
> (info->sequence->chroma_width*info->sequence->chroma_height + 15);

>                          for (j = 0; j < 3; j++)

>                                fbuf[i].yuv[j] = (unsigned char *)ALIGN_16 
> (fbuf[i].mbuf[j]);

>                          fbuf[i].used = 0;

>                     }

>                     for (i = 0; i < 2; i++)

>                    {

>                           current_fbuf = get_fbuf ();

>                           mpeg2_set_buf (decoder, current_fbuf->yuv, 
> current_fbuf);

>                    }

>                    break;

>            case STATE_PICTURE:

>                    current_fbuf = get_fbuf ();

>                    mpeg2_set_buf (decoder, current_fbuf->yuv, current_fbuf);

>                    break;

>            case STATE_SLICE:

>            case STATE_END:

>            case STATE_INVALID_END:

>                     if (info->display_fbuf)

>                    {

>                           if(pBufferIn != NULL)

>                           {

>                             //convert YUV420 data into BMP24 format

>                             Convert(  info->display_fbuf->buf[0],  
> info->display_fbuf->buf[1],info->display_fbuf->buf[2],pBufferOut);

>                              
> pOut->SetActualDataLength(info->sequence->width*info->sequence->height*3);//sets
>  the sample's data length.

>

>                             pOut->SetSyncPoint(TRUE);//output data to display

>                            }

>                      }

>                     if (info->discard_fbuf)

>                           ((struct fbuf_s *)info->discard_fbuf->id)->used = 0;

>                    break;

>           default:

>                    break;

>          }//end switch

>      } while (bMem!=2);

>   return S_OK;

> }

>

>

>

> 在2007-04-25,"Keith Winstein" <[EMAIL PROTECTED]> 写道:

>

> Allison,

>

>

>

> I have no idea. Please post the file somewhere or we won't be able to help

>

> you.

>

>

>

> -Keith

>

>

>

> On Wed, 25 Apr 2007, hdzhang wrote:

>

>

>

>> Keith,

>

>>

>

>> I used a "MPEG push demultiplexer".

>

>>

>

>> Is data from this demultiplexer TS or ES?

>

>>

>

>>

>

>> Allison

>

>>

>

>> 在2007-04-25,"Keith Winstein" <[EMAIL PROTECTED]> 写道:

>

>>

>

>> Hello,

>

>>

>

>> Can you please post a section of this file on the Internet so we can

>

>> examine it? Maybe you've got a transport stream instead of an elementary

>

>> stream or something like that.

>

>>

>

>> -Keith

>

>>

>

>> On Wed, 25 Apr 2007, hdzhang wrote:

>

>>

>

>>> hi, now I receive mpeg2 data from satelite receiver.

>

>>> But when I run mpeg2 codec ,I found it only can recognize STATE_BUFFER, can 
>>> not recognize  STATE_SEQUENCE or STATE_PICTURE. So it can not decoder 
>>> picture correctly.

>

>>> Why ? is the format of data received by satelite receiver not the same with 
>>> data from MPEG2 file?

>

>>>

>

>>
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Libmpeg2-devel mailing list
Libmpeg2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmpeg2-devel

Reply via email to