Hi Anand,

i understand your frustration. In the beginning to programm such stuff i was 
often frustated too. 
I can describe you my solution. 

In my application i developed a cut program, that worked only with I-Frames. 
But with a little modification it worked with every kind of image-types. 
For the libmpeg2 is it really important to send not only some "packets" to the 
Lib. You have to send a sequence header followed by an i-frame, and so far, 
if you want to decode the rest of your pictures, you have to send a p-frame 
after the i-frame, and at least all your b-frames, to deode your pictures 
correctly.

I do it in a following way:
In buffer i put in a sequence-header and an i-frame

The Decoding Process:

 while (parsing)
  {
    int state = mpeg2_parse(mDecoder);

    switch (state)
    {
    case STATE_BUFFER:  
      mpeg2_buffer(mDecoder, buffer, &buffer[blength]);
      break;
    case STATE_SEQUENCE:        
      mpeg2_convert(mDecoder, mpeg2convert_rgb24, NULL);
      pixel = mInfo->sequence->width * mInfo->sequence->height;

      for( int i=0; i<3; i++)
      {
        framebuffer[i][0] = new uint8_t[3*pixel+1];
        framebuffer[i][1] = framebuffer[i][2] = NULL;
        if (!framebuffer[i][0])
        {
          exit(0);
        }
        mpeg2_set_buf(mDecoder, framebuffer[i], NULL);
      }
      break;
    case STATE_SLICE:
    case STATE_END:             if (mInfo->display_fbuf)
      {
        //cout << "Dekodiere I-Frame: " << endl;

        flength = 3*pixel + 15;
        frame = new uint8_t[flength+1];

        // Buffer vorbereiten
        memset(frame, '\0', flength);

        // Bildheader
        sprintf((char*)frame,"P6\n%d %d\n255\n", mInfo->sequence->width, 
mInfo->sequence->height);

        // dekodierten Bildinhalt kopieren
        memcpy(&frame[15],mInfo->display_fbuf->buf[0], flength);

        parsing = false;
      }

      break;
    }

Hope it helps a little bit.

regards,
sven

PS: You can test alternativly the ffmpeg lib. There you can a beautyful 
example under libavcodec/apiexampe.c. Check it out, maybe you have more luck 
with that library it connection with your application.

Am Freitag 01 Juni 2007 17:44 schrieb anand meher:
> hi everyone,
>
>                  i am using mpeg2dec.c program of libmpeg2.i have modified
> it in a such a way that it can accept input on a udp port. I  am using a
> transport stream as an input. i am hardcoding the pid of the video as of
> now. I am demuxing and then sending the packets to the decoder.But when i
> save the images in a .ppm format i am seeing blocks in the .ppm frames .
> can anyone help me with this problem?
>
> regards
> anand.

-------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmpeg2-devel

Reply via email to