[FFmpeg-devel] Google Summer of Code participation

Stefano Sabatini stefano.sabatini-lala
Fri Apr 10 13:13:08 CEST 2009


On date Wednesday 2009-04-08 16:09:01 +0200, Thilo Borgmann encoded:
[...]
> diff --git a/ffmpeg.c b/ffmpeg.c
> index cb15120..4944811 100644
> --- a/ffmpeg.c
> +++ b/ffmpeg.c
> @@ -1174,8 +1174,7 @@ static int output_packet(AVInputStream *ist, int ist_index,
>  {
>      AVFormatContext *os;
>      AVOutputStream *ost;
> -    uint8_t *ptr;
> -    int len, ret, i;
> +    int ret, i;
>      uint8_t *data_buf;
>      int data_size, got_picture;
>      AVFrame picture;
> @@ -1184,29 +1183,32 @@ static int output_packet(AVInputStream *ist, int ist_index,
>      static short *samples= NULL;
>      AVSubtitle subtitle, *subtitle_to_free;
>      int got_subtitle;
> +    AVPacket avpkt;
> +
> +    av_init_packet(&avpkt);
>  
>      if(ist->next_pts == AV_NOPTS_VALUE)
>          ist->next_pts= ist->pts;
>  
>      if (pkt == NULL) {
>          /* EOF handling */
> -        ptr = NULL;
> -        len = 0;
> +        avpkt.data = NULL;
> +        avpkt.size = 0;
>          goto handle_eof;
>      }
>  
>      if(pkt->dts != AV_NOPTS_VALUE)
>          ist->next_pts = ist->pts = av_rescale_q(pkt->dts, ist->st->time_base, AV_TIME_BASE_Q);
>  
> -    len = pkt->size;
> -    ptr = pkt->data;
> +    avpkt.size = pkt->size;
> +    avpkt.data = pkt->data;
>  
>      //while we have more to decode or while the decoder did output something on EOF
> -    while (len > 0 || (!pkt && ist->next_pts != ist->pts)) {
> +    while (avpkt.size > 0 || (!pkt && ist->next_pts != ist->pts)) {
>      handle_eof:
>          ist->pts= ist->next_pts;
>  
> -        if(len && len != pkt->size && verbose>0)
> +        if(avpkt.size && avpkt.size != pkt->size && verbose>0)
>              fprintf(stderr, "Multiple frames in a packet from stream %d\n", pkt->stream_index);
>  
>          /* decode the packet if needed */
> @@ -1224,12 +1226,12 @@ static int output_packet(AVInputStream *ist, int ist_index,
>                  data_size= samples_size;
>                      /* XXX: could avoid copy if PCM 16 bits with same
>                         endianness as CPU */
> -                ret = avcodec_decode_audio2(ist->st->codec, samples, &data_size,
> -                                           ptr, len);
> +                ret = avcodec_decode_audio3(ist->st->codec, samples, &data_size,
> +                                           pkt);
>                  if (ret < 0)
>                      goto fail_decode;
> -                ptr += ret;
> -                len -= ret;
> +                avpkt.data += ret;
> +                avpkt.size -= ret;
>                  /* Some bug in mpeg audio decoder gives */
>                  /* data_size < 0, it seems they are overflows */
>                  if (data_size <= 0) {
> @@ -1245,8 +1247,8 @@ static int output_packet(AVInputStream *ist, int ist_index,
>                      /* XXX: allocate picture correctly */
>                      avcodec_get_frame_defaults(&picture);
>  
> -                    ret = avcodec_decode_video(ist->st->codec,
> -                                               &picture, &got_picture, ptr, len);
> +                    ret = avcodec_decode_video2(ist->st->codec,
> +                                               &picture, &got_picture, pkt);

Crash here.

Make sure you test your patches with make test before to submit them.

Also please one thread per patch, that should make easier the review
and commit process.

Regards.
-- 
FFmpeg = Faboulous and Fierce Majestic Peaceful Enchanting God



More information about the ffmpeg-devel mailing list