On Thu, May 31, 2012 at 02:03:38PM -0700, Luca Barbato wrote:
> Format switch statements and cleanup.
> ---
>  libavformat/flvdec.c |  483 
> ++++++++++++++++++++++++++++----------------------
>  1 files changed, 275 insertions(+), 208 deletions(-)
> 
> diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c
> index b6ad0a1..fa94e98 100644
> --- a/libavformat/flvdec.c
> +++ b/libavformat/flvdec.c
> @@ -60,7 +60,10 @@ static int flv_probe(AVProbeData *p)
>      const uint8_t *d;
>  
>      d = p->buf;
> -    if (d[0] == 'F' && d[1] == 'L' && d[2] == 'V' && d[3] < 5 && d[5]==0 && 
> AV_RB32(d+5)>8) {
> +    if (d[0] == 'F' &&
> +        d[1] == 'L' &&
> +        d[2] == 'V' &&
> +        d[3] < 5 && d[5] == 0 && AV_RB32(d + 5) > 8) {
>          return AVPROBE_SCORE_MAX;
>      }
>      return 0;
> @@ -77,72 +80,96 @@ static AVStream *create_stream(AVFormatContext *s, int 
> tag, int codec_type)
>      return st;
>  }
>  
> -static void flv_set_audio_codec(AVFormatContext *s, AVStream *astream, 
> AVCodecContext *acodec, int flv_codecid) {
> -    switch(flv_codecid) {
> -        //no distinction between S16 and S8 PCM codec flags
> -        case FLV_CODECID_PCM:
> -            acodec->codec_id = acodec->bits_per_coded_sample == 8 ? 
> CODEC_ID_PCM_U8 :
> +static void flv_set_audio_codec(AVFormatContext *s,
> +                                AVStream *astream,
> +                                AVCodecContext *acodec, int flv_codecid)
> +{
> +    switch (flv_codecid) {
> +    //no distinction between S16 and S8 PCM codec flags
> +    case FLV_CODECID_PCM:
> +        acodec->codec_id = acodec->bits_per_coded_sample == 8 ? 
> CODEC_ID_PCM_U8 :
>  #if HAVE_BIGENDIAN
> -                                CODEC_ID_PCM_S16BE;
> +                            CODEC_ID_PCM_S16BE;
>  #else
> -                                CODEC_ID_PCM_S16LE;
> +                            CODEC_ID_PCM_S16LE;
>  #endif
> -            break;
> -        case FLV_CODECID_PCM_LE:
> -            acodec->codec_id = acodec->bits_per_coded_sample == 8 ? 
> CODEC_ID_PCM_U8 : CODEC_ID_PCM_S16LE; break;
> -        case FLV_CODECID_AAC  : acodec->codec_id = CODEC_ID_AAC;             
>                        break;
> -        case FLV_CODECID_ADPCM: acodec->codec_id = CODEC_ID_ADPCM_SWF;       
>                        break;
> -        case FLV_CODECID_SPEEX:
> -            acodec->codec_id = CODEC_ID_SPEEX;
> -            acodec->sample_rate = 16000;
> -            break;
> -        case FLV_CODECID_MP3  : acodec->codec_id = CODEC_ID_MP3      ; 
> astream->need_parsing = AVSTREAM_PARSE_FULL; break;
> -        case FLV_CODECID_NELLYMOSER_8KHZ_MONO:
> -            acodec->sample_rate = 8000; //in case metadata does not 
> otherwise declare samplerate
> -            acodec->codec_id = CODEC_ID_NELLYMOSER;
> -            break;
> -        case FLV_CODECID_NELLYMOSER_16KHZ_MONO:
> -            acodec->sample_rate = 16000;
> -            acodec->codec_id = CODEC_ID_NELLYMOSER;
> -            break;
> -        case FLV_CODECID_NELLYMOSER:
> -            acodec->codec_id = CODEC_ID_NELLYMOSER;
> -            break;
> -        default:
> -            av_log(s, AV_LOG_INFO, "Unsupported audio codec (%x)\n", 
> flv_codecid >> FLV_AUDIO_CODECID_OFFSET);
> -            acodec->codec_tag = flv_codecid >> FLV_AUDIO_CODECID_OFFSET;
> +        break;
> +    case FLV_CODECID_PCM_LE:
> +        acodec->codec_id = acodec->bits_per_coded_sample == 8 ? 
> CODEC_ID_PCM_U8 : CODEC_ID_PCM_S16LE;
> +        break;
> +    case FLV_CODECID_AAC:
> +        acodec->codec_id = CODEC_ID_AAC;
> +        break;
> +    case FLV_CODECID_ADPCM:
> +        acodec->codec_id = CODEC_ID_ADPCM_SWF;
> +        break;
> +    case FLV_CODECID_SPEEX:
> +        acodec->codec_id = CODEC_ID_SPEEX;
> +        acodec->sample_rate = 16000;
> +        break;
> +    case FLV_CODECID_MP3:
> +        acodec->codec_id = CODEC_ID_MP3;
> +        astream->need_parsing = AVSTREAM_PARSE_FULL;
> +        break;
> +    case FLV_CODECID_NELLYMOSER_8KHZ_MONO:
> +        acodec->sample_rate = 8000; //in case metadata does not otherwise 
> declare samplerate
> +        acodec->codec_id = CODEC_ID_NELLYMOSER;
> +        break;
> +    case FLV_CODECID_NELLYMOSER_16KHZ_MONO:
> +        acodec->sample_rate = 16000;
> +        acodec->codec_id = CODEC_ID_NELLYMOSER;
> +        break;
> +    case FLV_CODECID_NELLYMOSER:
> +        acodec->codec_id = CODEC_ID_NELLYMOSER;
> +        break;
> +    default:
> +        av_log(s, AV_LOG_INFO, "Unsupported audio codec (%x)\n",
> +               flv_codecid >> FLV_AUDIO_CODECID_OFFSET);
> +        acodec->codec_tag = flv_codecid >> FLV_AUDIO_CODECID_OFFSET;
>      }
>  }
>  
> -static int flv_set_video_codec(AVFormatContext *s, AVStream *vstream, int 
> flv_codecid) {
> +static int flv_set_video_codec(AVFormatContext *s, AVStream *vstream,
> +                               int flv_codecid)
> +{
>      AVCodecContext *vcodec = vstream->codec;
> +
>      switch(flv_codecid) {
> -        case FLV_CODECID_H263  : vcodec->codec_id = CODEC_ID_FLV1   ; break;
> -        case FLV_CODECID_SCREEN: vcodec->codec_id = CODEC_ID_FLASHSV; break;
> -        case FLV_CODECID_SCREEN2: vcodec->codec_id = CODEC_ID_FLASHSV2; 
> break;
> -        case FLV_CODECID_VP6   : vcodec->codec_id = CODEC_ID_VP6F   ;
> -        case FLV_CODECID_VP6A  :
> -            if(flv_codecid == FLV_CODECID_VP6A)
> -                vcodec->codec_id = CODEC_ID_VP6A;
> -            if(vcodec->extradata_size != 1) {
> -                vcodec->extradata_size = 1;
> -                vcodec->extradata = av_malloc(1);
> -            }
> -            vcodec->extradata[0] = avio_r8(s->pb);
> -            return 1; // 1 byte body size adjustment for flv_read_packet()
> -        case FLV_CODECID_H264:
> -            vcodec->codec_id = CODEC_ID_H264;
> -            return 3; // not 4, reading packet type will consume one byte
> -        default:
> -            av_log(s, AV_LOG_INFO, "Unsupported video codec (%x)\n", 
> flv_codecid);
> -            vcodec->codec_tag = flv_codecid;
> +    case FLV_CODECID_H263:
> +        vcodec->codec_id = CODEC_ID_FLV1;
> +        break;
> +    case FLV_CODECID_SCREEN:
> +        vcodec->codec_id = CODEC_ID_FLASHSV;
> +        break;
> +    case FLV_CODECID_SCREEN2:
> +        vcodec->codec_id = CODEC_ID_FLASHSV2;
> +        break;
> +    case FLV_CODECID_VP6:
> +        vcodec->codec_id = CODEC_ID_VP6F;
> +    case FLV_CODECID_VP6A  :
> +        if (flv_codecid == FLV_CODECID_VP6A)
> +            vcodec->codec_id = CODEC_ID_VP6A;
> +        if (vcodec->extradata_size != 1) {
> +            vcodec->extradata_size = 1;
> +            vcodec->extradata = av_malloc(1);
> +        }
> +        vcodec->extradata[0] = avio_r8(s->pb);
> +        return 1; // 1 byte body size adjustment for flv_read_packet()
> +    case FLV_CODECID_H264:
> +        vcodec->codec_id = CODEC_ID_H264;
> +        return 3; // not 4, reading packet type will consume one byte
> +    default:
> +        av_log(s, AV_LOG_INFO, "Unsupported video codec (%x)\n", 
> flv_codecid);
> +        vcodec->codec_tag = flv_codecid;
>      }
>  
>      return 0;
>  }
>  
> -static int amf_get_string(AVIOContext *ioc, char *buffer, int buffsize) {
> +static int amf_get_string(AVIOContext *ioc, char *buffer, int buffsize)
> +{
>      int length = avio_rb16(ioc);
> +
>      if(length >= buffsize) {
>          avio_skip(ioc, length);
>          return -1;
> @@ -155,7 +182,10 @@ static int amf_get_string(AVIOContext *ioc, char 
> *buffer, int buffsize) {
>      return length;
>  }
>  
> -static int parse_keyframes_index(AVFormatContext *s, AVIOContext *ioc, 
> AVStream *vstream, int64_t max_pos) {
> +static int parse_keyframes_index(AVFormatContext *s,
> +                                 AVIOContext *ioc, AVStream *vstream,
> +                                 int64_t max_pos)
> +{
>      FLVContext *flv = s->priv_data;
>      unsigned int arraylen = 0, timeslen = 0, fileposlen = 0, i;
>      double num_val;
> @@ -168,7 +198,8 @@ static int parse_keyframes_index(AVFormatContext *s, 
> AVIOContext *ioc, AVStream
>      if (s->flags & AVFMT_FLAG_IGNIDX)
>          return 0;
>  
> -    while (avio_tell(ioc) < max_pos - 2 && amf_get_string(ioc, str_val, 
> sizeof(str_val)) > 0) {
> +    while (avio_tell(ioc) < max_pos - 2 &&
> +           amf_get_string(ioc, str_val, sizeof(str_val)) > 0) {
>          int64_t* current_array;
>  
>          // Expect array object in context
> @@ -180,8 +211,8 @@ static int parse_keyframes_index(AVFormatContext *s, 
> AVIOContext *ioc, AVStream
>              break;
>  
>          /*
> -         * Expect only 'times' or 'filepositions' sub-arrays in other case 
> refuse to use such metadata
> -         * for indexing
> +         * Expect only 'times' or 'filepositions' sub-arrays in other case
> +         * refuse to use such metadata for indexing
>           */
>          if (!strcmp(KEYFRAMES_TIMESTAMP_TAG, str_val) && !times) {
>              if (!(times = av_mallocz(sizeof(*times) * arraylen))) {
> @@ -190,7 +221,8 @@ static int parse_keyframes_index(AVFormatContext *s, 
> AVIOContext *ioc, AVStream
>              }
>              timeslen = arraylen;
>              current_array = times;
> -        } else if (!strcmp(KEYFRAMES_BYTEOFFSET_TAG, str_val) && 
> !filepositions) {
> +        } else if (!strcmp(KEYFRAMES_BYTEOFFSET_TAG, str_val) &&
> +                   !filepositions) {
>              if (!(filepositions = av_mallocz(sizeof(*filepositions) * 
> arraylen))) {
>                  ret = AVERROR(ENOMEM);
>                  goto finish;
> @@ -237,7 +269,10 @@ finish:
>      return ret;
>  }
>  
> -static int amf_parse_object(AVFormatContext *s, AVStream *astream, AVStream 
> *vstream, const char *key, int64_t max_pos, int depth) {
> +static int amf_parse_object(AVFormatContext *s,
> +                            AVStream *astream, AVStream *vstream,
> +                            const char *key, int64_t max_pos, int depth)
> +{
>      AVCodecContext *acodec, *vcodec;
>      AVIOContext *ioc;
>      AMFDataType amf_type;
> @@ -250,59 +285,66 @@ static int amf_parse_object(AVFormatContext *s, 
> AVStream *astream, AVStream *vst
>      amf_type = avio_r8(ioc);
>  
>      switch(amf_type) {
> -        case AMF_DATA_TYPE_NUMBER:
> -            num_val = av_int2double(avio_rb64(ioc)); break;
> -        case AMF_DATA_TYPE_BOOL:
> -            num_val = avio_r8(ioc); break;
> -        case AMF_DATA_TYPE_STRING:
> -            if(amf_get_string(ioc, str_val, sizeof(str_val)) < 0)
> -                return -1;
> -            break;
> -        case AMF_DATA_TYPE_OBJECT:
> -            if ((vstream || astream) && key && !strcmp(KEYFRAMES_TAG, key) 
> && depth == 1)
> -                if (parse_keyframes_index(s, ioc, vstream ? vstream : 
> astream,
> -                                          max_pos) < 0)
> -                    return -1;
> -
> -            while (avio_tell(ioc) < max_pos - 2 && amf_get_string(ioc, 
> str_val, sizeof(str_val)) > 0) {
> -                if (amf_parse_object(s, astream, vstream, str_val, max_pos, 
> depth + 1) < 0)
> -                    return -1; //if we couldn't skip, bomb out.
> -            }
> -            if(avio_r8(ioc) != AMF_END_OF_OBJECT)
> -                return -1;
> -            break;
> -        case AMF_DATA_TYPE_NULL:
> -        case AMF_DATA_TYPE_UNDEFINED:
> -        case AMF_DATA_TYPE_UNSUPPORTED:
> -            break; //these take up no additional space
> -        case AMF_DATA_TYPE_MIXEDARRAY:
> -            avio_skip(ioc, 4); //skip 32-bit max array index
> -            while(avio_tell(ioc) < max_pos - 2 && amf_get_string(ioc, 
> str_val, sizeof(str_val)) > 0) {
> -                //this is the only case in which we would want a nested 
> parse to not skip over the object
> -                if(amf_parse_object(s, astream, vstream, str_val, max_pos, 
> depth + 1) < 0)
> -                    return -1;
> -            }
> -            if(avio_r8(ioc) != AMF_END_OF_OBJECT)
> +    case AMF_DATA_TYPE_NUMBER:
> +        num_val = av_int2double(avio_rb64(ioc));
> +        break;
> +    case AMF_DATA_TYPE_BOOL:
> +        num_val = avio_r8(ioc);
> +        break;
> +    case AMF_DATA_TYPE_STRING:
> +        if(amf_get_string(ioc, str_val, sizeof(str_val)) < 0)

diego-space-nit

> +            return -1;
> +        break;
> +    case AMF_DATA_TYPE_OBJECT:
> +        if ((vstream || astream) && key &&
> +            !strcmp(KEYFRAMES_TAG, key) && depth == 1)
> +            if (parse_keyframes_index(s, ioc, vstream ? vstream : astream,
> +                                      max_pos) < 0)
>                  return -1;
> -            break;
> -        case AMF_DATA_TYPE_ARRAY: {
> -            unsigned int arraylen, i;
>  
> -            arraylen = avio_rb32(ioc);
> -            for(i = 0; i < arraylen && avio_tell(ioc) < max_pos - 1; i++) {
> -                if(amf_parse_object(s, NULL, NULL, NULL, max_pos, depth + 1) 
> < 0)
> -                    return -1; //if we couldn't skip, bomb out.
> -            }
> +        while (avio_tell(ioc) < max_pos - 2 &&
> +               amf_get_string(ioc, str_val, sizeof(str_val)) > 0) {
> +            if (amf_parse_object(s, astream, vstream, str_val,
> +                max_pos, depth + 1) < 0)
> +                return -1; //if we couldn't skip, bomb out.
>          }
> -            break;
> -        case AMF_DATA_TYPE_DATE:
> -            avio_skip(ioc, 8 + 2); //timestamp (double) and UTC offset 
> (int16)
> -            break;
> -        default: //unsupported type, we couldn't skip
> +        if (avio_r8(ioc) != AMF_END_OF_OBJECT)
>              return -1;
> +        break;
> +    case AMF_DATA_TYPE_NULL:
> +    case AMF_DATA_TYPE_UNDEFINED:
> +    case AMF_DATA_TYPE_UNSUPPORTED:
> +        break; //these take up no additional space
> +    case AMF_DATA_TYPE_MIXEDARRAY:
> +        avio_skip(ioc, 4); //skip 32-bit max array index
> +        while(avio_tell(ioc) < max_pos - 2 &&
> +              amf_get_string(ioc, str_val, sizeof(str_val)) > 0) {
> +            //this is the only case in which we would want a nested parse to 
> not skip over the object
> +            if (amf_parse_object(s, astream, vstream, str_val, max_pos, 
> depth + 1) < 0)
> +                return -1;
> +        }
> +        if(avio_r8(ioc) != AMF_END_OF_OBJECT)

diego-space-nits for while() and if()

> +            return -1;
> +        break;
> +    case AMF_DATA_TYPE_ARRAY: {
> +        unsigned int arraylen, i;
> +
> +        arraylen = avio_rb32(ioc);
> +        for (i = 0; i < arraylen && avio_tell(ioc) < max_pos - 1; i++) {
> +            if (amf_parse_object(s, NULL, NULL, NULL, max_pos, depth + 1) < 
> 0)
> +                return -1; //if we couldn't skip, bomb out.
> +        }
> +    }
> +        break;
> +    case AMF_DATA_TYPE_DATE:
> +        avio_skip(ioc, 8 + 2); //timestamp (double) and UTC offset (int16)
> +        break;
> +    default: //unsupported type, we couldn't skip
> +        return -1;
>      }
>  
> -    if(depth == 1 && key) { //only look for metadata values when we are not 
> nested and key != NULL
> +    //only look for metadata values when we are not nested and key != NULL
> +    if (depth == 1 && key) {
>          acodec = astream ? astream->codec : NULL;
>          vcodec = vstream ? vstream->codec : NULL;
>  
> @@ -348,18 +390,19 @@ static int amf_parse_object(AVFormatContext *s, 
> AVStream *astream, AVStream *vst
>      return 0;
>  }
>  
> -static int flv_read_metabody(AVFormatContext *s, int64_t next_pos) {
> +static int flv_read_metabody(AVFormatContext *s, int64_t next_pos)
> +{
>      AMFDataType type;
>      AVStream *stream, *astream, *vstream;
>      AVIOContext *ioc;
>      int i;
> -    char buffer[11]; //only needs to hold the string "onMetaData". Anything 
> longer is something we don't want.
> +    char buffer[11]; // We are interested only in onMetaData and onTextData
>  
>      astream = NULL;
>      vstream = NULL;
>      ioc = s->pb;
>  
> -    //first object needs to be "onMetaData" string
> +    // first object needs to be a string
>      type = avio_r8(ioc);
>      if (type != AMF_DATA_TYPE_STRING ||
>          amf_get_string(ioc, buffer, sizeof(buffer)) < 0)
> @@ -371,14 +414,19 @@ static int flv_read_metabody(AVFormatContext *s, 
> int64_t next_pos) {
>      if (strcmp(buffer, "onMetaData"))
>          return -1;
>  
> -    //find the streams now so that amf_parse_object doesn't need to do the 
> lookup every time it is called.
> +    /*
> +     * find the streams now so that amf_parse_object does not need
> +     * to do the lookup every time it is called.
> +     */
>      for(i = 0; i < s->nb_streams; i++) {
>          stream = s->streams[i];
> -        if     (stream->codec->codec_type == AVMEDIA_TYPE_AUDIO) astream = 
> stream;
> -        else if(stream->codec->codec_type == AVMEDIA_TYPE_VIDEO) vstream = 
> stream;
> +        if (stream->codec->codec_type == AVMEDIA_TYPE_AUDIO)
> +            astream = stream;
> +        else if (stream->codec->codec_type == AVMEDIA_TYPE_VIDEO)
> +            vstream = stream;
>      }
>  
> -    //parse the second object (we want a mixed array)
> +    // parse the second object (we want a mixed array)
>      if(amf_parse_object(s, astream, vstream, buffer, next_pos, 0) < 0)
>          return -1;
>  
> @@ -395,7 +443,9 @@ static int flv_read_header(AVFormatContext *s)
>      /* FIXME: better fix needed */
>      if (!flags) {
>          flags = FLV_HEADER_FLAG_HASVIDEO | FLV_HEADER_FLAG_HASAUDIO;
> -        av_log(s, AV_LOG_WARNING, "Broken FLV file, which says no streams 
> present, this might fail\n");
> +        av_log(s, AV_LOG_WARNING,
> +               "Broken FLV file, which says no streams present, "
> +               "this might fail\n");
>      }
>  
>      if((flags & (FLV_HEADER_FLAG_HASVIDEO|FLV_HEADER_FLAG_HASAUDIO))
> @@ -454,7 +504,8 @@ static int flv_queue_extradata(FLVContext *flv, 
> AVIOContext *pb, int stream,
>  static void clear_index_entries(AVFormatContext *s, int64_t pos)
>  {
>      int i, j, out;
> -    av_log(s, AV_LOG_WARNING, "Found invalid index entries, clearing the 
> index.\n");
> +    av_log(s, AV_LOG_WARNING,
> +           "Found invalid index entries, clearing the index.\n");
>      for (i = 0; i < s->nb_streams; i++) {
>          AVStream *st = s->streams[i];
>          /* Remove all index entries that point to >= pos */
> @@ -490,7 +541,7 @@ static int flv_data_packet(AVFormatContext *s, AVPacket 
> *pkt,
>          goto out;
>  
>      amf_get_string(pb, buf, sizeof(buf));
> -    //FIXME parse it as codec_id
> +    // FIXME parse it as codec_id
>      amf_get_string(pb, buf, sizeof(buf));
>      if (strcmp(buf, "text") || avio_r8(pb) != AMF_DATA_TYPE_STRING)
>          goto out;
> @@ -536,99 +587,107 @@ static int flv_read_packet(AVFormatContext *s, 
> AVPacket *pkt)
>      int sample_rate = 0, channels = 0;
>      AVStream *st = NULL;
>  
> - for(;;avio_skip(s->pb, 4)){ /* pkt size is repeated at end. skip it */
> -    pos = avio_tell(s->pb);
> -    type = avio_r8(s->pb);
> -    size = avio_rb24(s->pb);
> -    dts = avio_rb24(s->pb);
> -    dts |= avio_r8(s->pb) << 24;
> -    av_dlog(s, "type:%d, size:%d, dts:%"PRId64"\n", type, size, dts);
> -    if (s->pb->eof_reached)
> -        return AVERROR_EOF;
> -    avio_skip(s->pb, 3); /* stream id, always 0 */
> -    flags = 0;
> -
> -    if (flv->validate_next < flv->validate_count) {
> -        int64_t validate_pos = flv->validate_index[flv->validate_next].pos;
> -        if (pos == validate_pos) {
> -            if (FFABS(dts - flv->validate_index[flv->validate_next].dts) <=
> -                VALIDATE_INDEX_TS_THRESH) {
> -                flv->validate_next++;
> -            } else {
> +    for(;;avio_skip(s->pb, 4)) { /* pkt size is repeated at end. skip it */
> +        pos  = avio_tell(s->pb);
> +        type = avio_r8(s->pb);
> +        size = avio_rb24(s->pb);
> +        dts  = avio_rb24(s->pb);
> +        dts |= avio_r8(s->pb) << 24;
> +        av_dlog(s, "type:%d, size:%d, dts:%"PRId64"\n", type, size, dts);
> +        if (s->pb->eof_reached)
> +            return AVERROR_EOF;
> +        avio_skip(s->pb, 3); /* stream id, always 0 */
> +        flags = 0;
> +
> +        if (flv->validate_next < flv->validate_count) {
> +            int64_t validate_pos = 
> flv->validate_index[flv->validate_next].pos;
> +            if (pos == validate_pos) {
> +                if (FFABS(dts - flv->validate_index[flv->validate_next].dts) 
> <=
> +                    VALIDATE_INDEX_TS_THRESH) {
> +                    flv->validate_next++;
> +                } else {
> +                    clear_index_entries(s, validate_pos);
> +                    flv->validate_count = 0;
> +                }
> +            } else if (pos > validate_pos) {
>                  clear_index_entries(s, validate_pos);
>                  flv->validate_count = 0;
>              }
> -        } else if (pos > validate_pos) {
> -            clear_index_entries(s, validate_pos);
> -            flv->validate_count = 0;
>          }
> -    }
> -
> -    if(size == 0)
> -        continue;
>  
> -    next= size + avio_tell(s->pb);
> +        if (size == 0)
> +            continue;
> +
> +        next= size + avio_tell(s->pb);

ahem

> +
> +        if (type == FLV_TAG_TYPE_AUDIO) {
> +            is_audio = 1;
> +            flags = avio_r8(s->pb);
> +            size--;
> +        } else if (type == FLV_TAG_TYPE_VIDEO) {
> +            is_audio = 0;
> +            flags = avio_r8(s->pb);
> +            size--;
> +            if ((flags & 0xf0) == 0x50) /* video info / command frame */
> +                goto skip;
> +        } else {
> +            if (type == FLV_TAG_TYPE_META && size > 13 + 1 + 4)
> +                if (flv_read_metabody(s, next) > 0) {
> +                    return flv_data_packet(s, pkt, dts, next);
> +                }
> +            else /* skip packet */
> +                av_log(s, AV_LOG_DEBUG,
> +                       "skipping flv packet: type %d, size %d, flags %d\n",
> +                       type, size, flags);
> +        skip:
> +            avio_seek(s->pb, next, SEEK_SET);
> +            continue;
> +        }
>  
> -    if (type == FLV_TAG_TYPE_AUDIO) {
> -        is_audio=1;
> -        flags = avio_r8(s->pb);
> -        size--;
> -    } else if (type == FLV_TAG_TYPE_VIDEO) {
> -        is_audio=0;
> -        flags = avio_r8(s->pb);
> -        size--;
> -        if ((flags & 0xf0) == 0x50) /* video info / command frame */
> -            goto skip;
> -    } else {
> -        if (type == FLV_TAG_TYPE_META && size > 13+1+4)
> -            if (flv_read_metabody(s, next) > 0) {
> -                return flv_data_packet(s, pkt, dts, next);
> -            }
> -        else /* skip packet */
> -            av_log(s, AV_LOG_DEBUG, "skipping flv packet: type %d, size %d, 
> flags %d\n", type, size, flags);
> -    skip:
> -        avio_seek(s->pb, next, SEEK_SET);
> -        continue;
> -    }
> +        /* skip empty data packets */
> +        if (!size)
> +            continue;
>  
> -    /* skip empty data packets */
> -    if (!size)
> -        continue;
> +        /* now find stream */
> +        for(i=0;i<s->nb_streams;i++) {
> +            st = s->streams[i];
> +            if (st->id == is_audio)
> +                break;
> +        }
>  
> -    /* now find stream */
> -    for(i=0;i<s->nb_streams;i++) {
> -        st = s->streams[i];
> -        if (st->id == is_audio)
> -            break;
> -    }
> -    if(i == s->nb_streams){
> -        av_log(s, AV_LOG_ERROR, "invalid stream\n");
> -        st = create_stream(s, is_audio,
> -             is_audio ? AVMEDIA_TYPE_AUDIO : AVMEDIA_TYPE_VIDEO);
> -        s->ctx_flags &= ~AVFMTCTX_NOHEADER;
> -    }
> -    av_dlog(s, "%d %X %d \n", is_audio, flags, st->discard);
> -    if(  (st->discard >= AVDISCARD_NONKEY && !((flags & 
> FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_KEY ||         is_audio))
> -       ||(st->discard >= AVDISCARD_BIDIR  &&  ((flags & 
> FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_DISP_INTER && !is_audio))
> -       || st->discard >= AVDISCARD_ALL
> -       ){
> -        avio_seek(s->pb, next, SEEK_SET);
> -        continue;
> -    }
> -    if ((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_KEY)
> -        av_add_index_entry(st, pos, dts, size, 0, AVINDEX_KEYFRAME);
> -    break;
> - }
> +        if (i == s->nb_streams) {
> +            av_log(s, AV_LOG_ERROR, "invalid stream\n");
> +            st = create_stream(s, is_audio,
> +                               is_audio ? AVMEDIA_TYPE_AUDIO : 
> AVMEDIA_TYPE_VIDEO);
> +            s->ctx_flags &= ~AVFMTCTX_NOHEADER;
> +        }
> +        av_dlog(s, "%d %X %d \n", is_audio, flags, st->discard);
> +        if ((st->discard >= AVDISCARD_NONKEY &&
> +             !((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_KEY ||
> +                is_audio)) ||
> +            (st->discard >= AVDISCARD_BIDIR  &&
> +              ((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_DISP_INTER &&
> +               !is_audio)) ||
> +             st->discard >= AVDISCARD_ALL
> +           ) {
> +            avio_seek(s->pb, next, SEEK_SET);
> +            continue;
> +        }
> +        if ((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_KEY)
> +            av_add_index_entry(st, pos, dts, size, 0, AVINDEX_KEYFRAME);
> +        break;
> +     }
>  
>      // if not streamed and no duration from metadata then seek to end to 
> find the duration from the timestamps
> -    if(s->pb->seekable && (!s->duration || s->duration==AV_NOPTS_VALUE)){
> +    if (s->pb->seekable && (!s->duration || s->duration==AV_NOPTS_VALUE)) {
>          int size;
> -        const int64_t pos= avio_tell(s->pb);
> -        const int64_t fsize= avio_size(s->pb);
> -        avio_seek(s->pb, fsize-4, SEEK_SET);
> +        const int64_t pos   = avio_tell(s->pb);
> +        const int64_t fsize = avio_size(s->pb);
> +
> +        avio_seek(s->pb, fsize - 4, SEEK_SET);
>          size= avio_rb32(s->pb);
> -        avio_seek(s->pb, fsize-3-size, SEEK_SET);
> -        if(size == avio_rb24(s->pb) + 11){
> +        avio_seek(s->pb, fsize - 3 - size, SEEK_SET);
> +        if(size == avio_rb24(s->pb) + 11) {

diego-space-nit

>              uint32_t ts = avio_rb24(s->pb);
>              ts |= avio_r8(s->pb) << 24;
>              s->duration = ts * (int64_t)AV_TIME_BASE / 1000;
> @@ -636,18 +695,21 @@ static int flv_read_packet(AVFormatContext *s, AVPacket 
> *pkt)
>          avio_seek(s->pb, pos, SEEK_SET);
>      }
>  
> -    if(is_audio){
> +    if (is_audio) {
>          int bits_per_coded_sample;
>          channels    = (flags & FLV_AUDIO_CHANNEL_MASK) == FLV_STEREO ? 2 : 1;
>          sample_rate = (44100 << ((flags & FLV_AUDIO_SAMPLERATE_MASK) >> 
> FLV_AUDIO_SAMPLERATE_OFFSET) >> 3);
>          bits_per_coded_sample = (flags & FLV_AUDIO_SAMPLESIZE_MASK) ? 16 : 8;
> -        if(!st->codec->channels || !st->codec->sample_rate || 
> !st->codec->bits_per_coded_sample) {
> +        if (!st->codec->channels    ||
> +            !st->codec->sample_rate ||
> +            !st->codec->bits_per_coded_sample) {
>              st->codec->channels              = channels;
>              st->codec->sample_rate           = sample_rate;
>              st->codec->bits_per_coded_sample = bits_per_coded_sample;
>          }
> -        if(!st->codec->codec_id){
> -            flv_set_audio_codec(s, st, st->codec, flags & 
> FLV_AUDIO_CODECID_MASK);
> +        if (!st->codec->codec_id) {
> +            flv_set_audio_codec(s, st, st->codec,
> +                                flags & FLV_AUDIO_CODECID_MASK);
>              flv->last_sample_rate = sample_rate = st->codec->sample_rate;
>              flv->last_channels    = channels    = st->codec->channels;
>          } else {
> @@ -656,7 +718,7 @@ static int flv_read_packet(AVFormatContext *s, AVPacket 
> *pkt)
>              flv_set_audio_codec(s, st, &ctx, flags & FLV_AUDIO_CODECID_MASK);
>              sample_rate = ctx.sample_rate;
>          }
> -    }else{
> +    } else {
>          size -= flv_set_video_codec(s, st, flags & FLV_VIDEO_CODECID_MASK);
>      }
>  
> @@ -665,11 +727,14 @@ static int flv_read_packet(AVFormatContext *s, AVPacket 
> *pkt)
>          int type = avio_r8(s->pb);
>          size--;
>          if (st->codec->codec_id == CODEC_ID_H264) {
> -            int32_t cts = (avio_rb24(s->pb)+0xff800000)^0xff800000; // sign 
> extension
> +            // sign extension
> +            int32_t cts = (avio_rb24(s->pb) + 0xff800000)^0xff800000;
> +
>              pts = dts + cts;
>              if (cts < 0) { // dts are wrong
>                  flv->wrong_dts = 1;
> -                av_log(s, AV_LOG_WARNING, "negative cts, previous timestamps 
> might be wrong\n");
> +                av_log(s, AV_LOG_WARNING,
> +                       "negative cts, previous timestamps might be wrong\n");
>              }
>              if (flv->wrong_dts)
>                  dts = AV_NOPTS_VALUE;
> @@ -707,15 +772,16 @@ static int flv_read_packet(AVFormatContext *s, AVPacket 
> *pkt)
>          goto leave;
>      }
>  
> -    ret= av_get_packet(s->pb, pkt, size);
> +    ret = av_get_packet(s->pb, pkt, size);
>      if (ret < 0) {
>          return AVERROR(EIO);
>      }
>      /* note: we need to modify the packet size here to handle the last
>         packet */
>      pkt->size = ret;
> -    pkt->dts = dts;
> -    pkt->pts = pts == AV_NOPTS_VALUE ? dts : pts;
> +    pkt->dts  = dts;
> +    pkt->pts  = pts == AV_NOPTS_VALUE ? dts : pts;
> +
>      pkt->stream_index = st->index;
>      if (flv->new_extradata[is_audio]) {
>          uint8_t *side = av_packet_new_side_data(pkt, 
> AV_PKT_DATA_NEW_EXTRADATA,
> @@ -727,6 +793,7 @@ static int flv_read_packet(AVFormatContext *s, AVPacket 
> *pkt)
>              flv->new_extradata_size[is_audio] = 0;
>          }
>      }
> +
>      if (is_audio && (sample_rate != flv->last_sample_rate ||
>                       channels != flv->last_channels)) {
>          flv->last_sample_rate = sample_rate;
> @@ -743,7 +810,7 @@ leave:
>  }
>  
>  static int flv_read_seek(AVFormatContext *s, int stream_index,
> -    int64_t ts, int flags)
> +                         int64_t ts, int flags)
>  {
>      FLVContext *flv = s->priv_data;
>      flv->validate_count = 0;
> -- 

if you fix these (and add spaces to for() loop in flv_packet_data())
you can commit it, probably even squashing all cosmetics patches together

Patchset in general LGTM
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to