[FFmpeg-soc] [FFmpeg-devel] [Patch]GSoC 2008 qualification task TS Muxer

Baptiste Coudurier baptiste.coudurier at smartjog.com
Sun Mar 30 19:20:51 CEST 2008


On Mon, Mar 31, 2008 at 12:48:00AM +0800, zhentan feng wrote:
> [...]
>
> >
> > > +    /*just consider dvd and mpeg2 for ff_pes_cal_header()*/
> >  > +    if(s->is_mpeg2){
> >  > +        stream->format = FMT_MPEG2;
> >  > +        if(s->is_dvd)
> >  > +            stream->format = FMT_DVD | FMT_MPEG2;
> >  > +    }
> >  >      id = stream->id;
> >  >
> >
> >  You must get rid of is_mpeg and is_dvd if you have FMT_*
> >  Btw, after rethinking, PES_FMT_* is more appropriate.
> >
> well, I remove the assignments to "stream->format" to the function
> mpeg_mux_init().
> you can find it in the new patch.
> Since is_dvd and is_mpeg2 appear many times in mpeg_mux_init(), at the
> same time,PESStream haven't been initialized, so I think we cannot get
> rid of is_dvd and is_mpeg2.Moreover, they are variables in
> MpegMuxContext and may be used in somewhere else.

Having a format field in MpexMuxContext and in StreamInfo, is not that bad IMHO,
still it merges 5 fields into one, but yes, this could be done separately.

>
> >  Furthermore, the new mechanism can be added separately, it is non functionnal.
> >  So this means the patch must be separate.
> >
> >  > [...]
> >  >
> >  > Index: mpegpes.h
> >  > ===================================================================
> >  > --- mpegpes.h (revision 2048)
> >  > +++ mpegpes.h (working copy)
> >  > @@ -30,6 +30,12 @@
> >  >  #include "avformat.h"
> >  >  #include "fifo.h"
> >  >
> >  > +#define FMT_MPEG2 0x01
> >  > +#define FMT_VCD 0x02
> >  > +#define FMT_SVCD 0x04
> >  > +#define FMT_DVD 0x08
> >  > +#define FMT_TS 0x10
> >  > +
> >
> >  SVCD/DVD/TS are MPEG2 so you can add FMT_MPEG2 to constants.
> >
> >  This will avoid some checks.
>
> fixed.

Well, why don't you always define TS as MPEG2 ?

> [...]
>
> +void ff_pes_cal_header(int id,PESStream * stream,
> +          int *packet_size,int *header_len,int64_t *pts,int64_t *dts,
> +    int *payload_size,int *startcode,int *stuffing_size,
> +          int *trailer_size,int *pad_packet_bytes)
> +{
> +     /* packet header size */
> +        *packet_size -= 6;
>
> +        /* packet header */
> +        if (stream->format & PES_FMT_TS) {
> +            *header_len = 3;
> +            *header_len += 1; /* obligatory stuffing byte */
> +        }else if (stream->format & PES_FMT_MPEG2){
> +             *header_len = 3;
> +             if (stream->packet_number==0)
> +                 *header_len += 3; /* PES extension */
> +             *header_len += 1; /* obligatory stuffing byte */
> +        } else {
> +              *header_len = 0;
> +        }

This can be merged in & PES_FMT_MPEG2 case.

> [...]
>
> +            *pts=*dts=AV_NOPTS_VALUE;
> +            *header_len -= timestamp_len;
> +            if ((stream->format & PES_FMT_DVD) && stream->align_iframe){
> +                    *pad_packet_bytes += timestamp_len;
> +                    *packet_size -= timestamp_len;
> +                }
> +            else {
> +                *payload_size += timestamp_len;
> +              }
> +                *stuffing_size += timestamp_len;
> +                if(*payload_size > *trailer_size)
> +                    *stuffing_size += *payload_size - *trailer_size;
> +            }

Indentation looks weird.

> [...]
>
>      int pes_size;
>      uint8_t* q = stream->payload;
> +    pes_stream->format = PES_FMT_TS|PES_FMT_MPEG2;
>

See top comment.

[...]

--
Baptiste COUDURIER                              GnuPG Key Id: 0x5C1ABAAA
SMARTJOG SAS                                     http://www.smartjog.com
Key fingerprint                 8D77134D20CC9220201FC5DB0AC9325C5C1ABAAA
Phone: +33 1 49966312



More information about the FFmpeg-soc mailing list