* qatar/master: FATE: Add ZeroCodec test oggparseogm: fix order of arguments of avpriv_set_pts_info(). pngenc: better upper bound for encoded frame size. aiffdec: set block_duration to 1 for PCM codecs that are supported in AIFF-C aiffdec: factor out handling of integer PCM for AIFF-C and plain AIFF aiffdec: use av_get_audio_frame_duration() to set block_duration for AIFF-C aiffdec: do not set bit rate if block duration is unknown wmall: output packet only if we have decoded some samples Conflicts: libavcodec/pngenc.c tests/fate/lossless-video.mak Merged-by: Michael Niedermayer <michaelni@gmx.at>tags/n0.11
| @@ -219,7 +219,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, | |||||
| PNGEncContext *s = avctx->priv_data; | PNGEncContext *s = avctx->priv_data; | ||||
| AVFrame * const p= &s->picture; | AVFrame * const p= &s->picture; | ||||
| int bit_depth, color_type, y, len, row_size, ret, is_progressive; | int bit_depth, color_type, y, len, row_size, ret, is_progressive; | ||||
| int bits_per_pixel, pass_row_size, max_packet_size; | |||||
| int bits_per_pixel, pass_row_size, enc_row_size, max_packet_size; | |||||
| int compression_level; | int compression_level; | ||||
| uint8_t *ptr, *top; | uint8_t *ptr, *top; | ||||
| uint8_t *crow_base = NULL, *crow_buf, *crow; | uint8_t *crow_base = NULL, *crow_buf, *crow; | ||||
| @@ -230,15 +230,6 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, | |||||
| p->pict_type= AV_PICTURE_TYPE_I; | p->pict_type= AV_PICTURE_TYPE_I; | ||||
| p->key_frame= 1; | p->key_frame= 1; | ||||
| max_packet_size = avctx->width * avctx->height * 9 + FF_MIN_BUFFER_SIZE; | |||||
| if ((ret = ff_alloc_packet2(avctx, pkt, max_packet_size)) < 0) { | |||||
| return ret; | |||||
| } | |||||
| s->bytestream_start = | |||||
| s->bytestream = pkt->data; | |||||
| s->bytestream_end = pkt->data + pkt->size; | |||||
| is_progressive = !!(avctx->flags & CODEC_FLAG_INTERLACED_DCT); | is_progressive = !!(avctx->flags & CODEC_FLAG_INTERLACED_DCT); | ||||
| switch(avctx->pix_fmt) { | switch(avctx->pix_fmt) { | ||||
| case PIX_FMT_RGBA64BE: | case PIX_FMT_RGBA64BE: | ||||
| @@ -293,6 +284,19 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, | |||||
| Z_DEFLATED, 15, 8, Z_DEFAULT_STRATEGY); | Z_DEFLATED, 15, 8, Z_DEFAULT_STRATEGY); | ||||
| if (ret != Z_OK) | if (ret != Z_OK) | ||||
| return -1; | return -1; | ||||
| enc_row_size = deflateBound(&s->zstream, row_size); | |||||
| max_packet_size = avctx->height * (enc_row_size + | |||||
| ((enc_row_size + IOBUF_SIZE - 1) / IOBUF_SIZE) * 12) | |||||
| + FF_MIN_BUFFER_SIZE; | |||||
| if ((ret = ff_alloc_packet2(avctx, pkt, max_packet_size)) < 0) { | |||||
| return ret; | |||||
| } | |||||
| s->bytestream_start = | |||||
| s->bytestream = pkt->data; | |||||
| s->bytestream_end = pkt->data + pkt->size; | |||||
| crow_base = av_malloc((row_size + 32) << (s->filter_type == PNG_FILTER_VALUE_MIXED)); | crow_base = av_malloc((row_size + 32) << (s->filter_type == PNG_FILTER_VALUE_MIXED)); | ||||
| if (!crow_base) | if (!crow_base) | ||||
| goto fail; | goto fail; | ||||
| @@ -1229,7 +1229,7 @@ static int decode_packet(AVCodecContext *avctx, void *data, int *got_frame_ptr, | |||||
| } | } | ||||
| *(AVFrame *)data = s->frame; | *(AVFrame *)data = s->frame; | ||||
| *got_frame_ptr = 1; | |||||
| *got_frame_ptr = s->frame.nb_samples > 0; | |||||
| s->packet_offset = get_bits_count(gb) & 7; | s->packet_offset = get_bits_count(gb) & 7; | ||||
| return (s->packet_loss) ? AVERROR_INVALIDDATA : get_bits_count(gb) >> 3; | return (s->packet_loss) ? AVERROR_INVALIDDATA : get_bits_count(gb) >> 3; | ||||
| @@ -1243,6 +1243,6 @@ AVCodec ff_wmalossless_decoder = { | |||||
| .priv_data_size = sizeof(WmallDecodeCtx), | .priv_data_size = sizeof(WmallDecodeCtx), | ||||
| .init = decode_init, | .init = decode_init, | ||||
| .decode = decode_packet, | .decode = decode_packet, | ||||
| .capabilities = CODEC_CAP_SUBFRAMES | CODEC_CAP_DR1, | |||||
| .capabilities = CODEC_CAP_SUBFRAMES | CODEC_CAP_DR1 | CODEC_CAP_DELAY, | |||||
| .long_name = NULL_IF_CONFIG_SMALL("Windows Media Audio Lossless"), | .long_name = NULL_IF_CONFIG_SMALL("Windows Media Audio Lossless"), | ||||
| }; | }; | ||||
| @@ -112,47 +112,48 @@ static unsigned int get_aiff_header(AVFormatContext *s, int size, | |||||
| codec->sample_rate = sample_rate; | codec->sample_rate = sample_rate; | ||||
| size -= 18; | size -= 18; | ||||
| /* Got an AIFF-C? */ | |||||
| /* get codec id for AIFF-C */ | |||||
| if (version == AIFF_C_VERSION1) { | if (version == AIFF_C_VERSION1) { | ||||
| codec->codec_tag = avio_rl32(pb); | codec->codec_tag = avio_rl32(pb); | ||||
| codec->codec_id = ff_codec_get_id(ff_codec_aiff_tags, codec->codec_tag); | codec->codec_id = ff_codec_get_id(ff_codec_aiff_tags, codec->codec_tag); | ||||
| size -= 4; | |||||
| } | |||||
| if (version != AIFF_C_VERSION1 || codec->codec_id == CODEC_ID_PCM_S16BE) { | |||||
| codec->codec_id = aiff_codec_get_id(codec->bits_per_coded_sample); | |||||
| codec->bits_per_coded_sample = av_get_bits_per_sample(codec->codec_id); | |||||
| aiff->block_duration = 1; | |||||
| } else { | |||||
| switch (codec->codec_id) { | switch (codec->codec_id) { | ||||
| case CODEC_ID_PCM_S16BE: | |||||
| codec->codec_id = aiff_codec_get_id(codec->bits_per_coded_sample); | |||||
| codec->bits_per_coded_sample = av_get_bits_per_sample(codec->codec_id); | |||||
| case CODEC_ID_PCM_F32BE: | |||||
| case CODEC_ID_PCM_F64BE: | |||||
| case CODEC_ID_PCM_S16LE: | |||||
| case CODEC_ID_PCM_ALAW: | |||||
| case CODEC_ID_PCM_MULAW: | |||||
| aiff->block_duration = 1; | aiff->block_duration = 1; | ||||
| break; | break; | ||||
| case CODEC_ID_ADPCM_IMA_QT: | case CODEC_ID_ADPCM_IMA_QT: | ||||
| codec->block_align = 34*codec->channels; | codec->block_align = 34*codec->channels; | ||||
| aiff->block_duration = 64; | |||||
| break; | break; | ||||
| case CODEC_ID_MACE3: | case CODEC_ID_MACE3: | ||||
| codec->block_align = 2*codec->channels; | codec->block_align = 2*codec->channels; | ||||
| aiff->block_duration = 6; | |||||
| break; | break; | ||||
| case CODEC_ID_MACE6: | case CODEC_ID_MACE6: | ||||
| codec->block_align = 1*codec->channels; | codec->block_align = 1*codec->channels; | ||||
| aiff->block_duration = 6; | |||||
| break; | break; | ||||
| case CODEC_ID_GSM: | case CODEC_ID_GSM: | ||||
| codec->block_align = 33; | codec->block_align = 33; | ||||
| aiff->block_duration = 160; | |||||
| break; | break; | ||||
| case CODEC_ID_QCELP: | case CODEC_ID_QCELP: | ||||
| codec->block_align = 35; | codec->block_align = 35; | ||||
| aiff->block_duration = 160; | |||||
| break; | break; | ||||
| default: | default: | ||||
| aiff->block_duration = 1; | aiff->block_duration = 1; | ||||
| break; | break; | ||||
| } | } | ||||
| size -= 4; | |||||
| } else { | |||||
| /* Need the codec type */ | |||||
| codec->codec_id = aiff_codec_get_id(codec->bits_per_coded_sample); | |||||
| codec->bits_per_coded_sample = av_get_bits_per_sample(codec->codec_id); | |||||
| aiff->block_duration = 1; | |||||
| if (codec->block_align > 0) | |||||
| aiff->block_duration = av_get_audio_frame_duration(codec, | |||||
| codec->block_align); | |||||
| } | } | ||||
| /* Block align needs to be computed in all cases, as the definition | /* Block align needs to be computed in all cases, as the definition | ||||
| @@ -160,8 +161,10 @@ static unsigned int get_aiff_header(AVFormatContext *s, int size, | |||||
| if (!codec->block_align) | if (!codec->block_align) | ||||
| codec->block_align = (codec->bits_per_coded_sample * codec->channels) >> 3; | codec->block_align = (codec->bits_per_coded_sample * codec->channels) >> 3; | ||||
| codec->bit_rate = codec->sample_rate * (codec->block_align << 3) / | |||||
| aiff->block_duration; | |||||
| if (aiff->block_duration) { | |||||
| codec->bit_rate = codec->sample_rate * (codec->block_align << 3) / | |||||
| aiff->block_duration; | |||||
| } | |||||
| /* Chunk is over */ | /* Chunk is over */ | ||||
| if (size) | if (size) | ||||
| @@ -24,3 +24,4 @@ fate-zerocodec: CMD = framecrc -i $(SAMPLES)/zerocodec/sample-zeco.avi | |||||
| FATE_TESTS += $(FATE_LOSSLESS_VIDEO) | FATE_TESTS += $(FATE_LOSSLESS_VIDEO) | ||||
| fate-lossless-video: $(FATE_LOSSLESS_VIDEO) | fate-lossless-video: $(FATE_LOSSLESS_VIDEO) | ||||