* commit '199fb40278146c5bb162990c66ad3cd561abc780': rtpdec: Use ffio_free_dyn_buf Conflicts: libavformat/rtpdec_latm.c libavformat/rtpdec_svq3.c libavformat/rtpdec_xiph.c Merged-by: Michael Niedermayer <michaelni@gmx.at>tags/n2.6
| @@ -20,6 +20,7 @@ | |||
| */ | |||
| #include "avformat.h" | |||
| #include "avio_internal.h" | |||
| #include "rtpdec_formats.h" | |||
| #define RTP_AC3_PAYLOAD_HEADER_SIZE 2 | |||
| @@ -31,19 +32,9 @@ struct PayloadContext { | |||
| AVIOContext *fragment; | |||
| }; | |||
| static void free_fragment(PayloadContext *data) | |||
| { | |||
| if (data->fragment) { | |||
| uint8_t *p; | |||
| avio_close_dyn_buf(data->fragment, &p); | |||
| av_free(p); | |||
| data->fragment = NULL; | |||
| } | |||
| } | |||
| static void ac3_free_context(PayloadContext *data) | |||
| { | |||
| free_fragment(data); | |||
| ffio_free_dyn_buf(&data->fragment); | |||
| } | |||
| static int ac3_handle_packet(AVFormatContext *ctx, PayloadContext *data, | |||
| @@ -82,7 +73,7 @@ static int ac3_handle_packet(AVFormatContext *ctx, PayloadContext *data, | |||
| case 1: | |||
| case 2: /* First fragment */ | |||
| free_fragment(data); | |||
| ffio_free_dyn_buf(&data->fragment); | |||
| data->last_frame = 1; | |||
| data->nr_frames = nr_frames; | |||
| @@ -102,7 +93,7 @@ static int ac3_handle_packet(AVFormatContext *ctx, PayloadContext *data, | |||
| } | |||
| if (nr_frames != data->nr_frames || | |||
| data->timestamp != *timestamp) { | |||
| free_fragment(data); | |||
| ffio_free_dyn_buf(&data->fragment); | |||
| av_log(ctx, AV_LOG_ERROR, "Invalid packet received\n"); | |||
| return AVERROR_INVALIDDATA; | |||
| } | |||
| @@ -115,7 +106,7 @@ static int ac3_handle_packet(AVFormatContext *ctx, PayloadContext *data, | |||
| return AVERROR(EAGAIN); | |||
| if (data->last_frame != data->nr_frames) { | |||
| free_fragment(data); | |||
| ffio_free_dyn_buf(&data->fragment); | |||
| av_log(ctx, AV_LOG_ERROR, "Missed %d packets\n", | |||
| data->nr_frames - data->last_frame); | |||
| return AVERROR_INVALIDDATA; | |||
| @@ -224,10 +224,7 @@ static int asfrtp_parse_packet(AVFormatContext *s, PayloadContext *asf, | |||
| * multiple RTP packets. | |||
| */ | |||
| if (asf->pktbuf && len_off != avio_tell(asf->pktbuf)) { | |||
| uint8_t *p; | |||
| avio_close_dyn_buf(asf->pktbuf, &p); | |||
| asf->pktbuf = NULL; | |||
| av_free(p); | |||
| ffio_free_dyn_buf(&asf->pktbuf); | |||
| } | |||
| if (!len_off && !asf->pktbuf && | |||
| (res = avio_open_dyn_buf(&asf->pktbuf)) < 0) | |||
| @@ -290,12 +287,7 @@ static int asfrtp_parse_packet(AVFormatContext *s, PayloadContext *asf, | |||
| static void asfrtp_free_context(PayloadContext *asf) | |||
| { | |||
| if (asf->pktbuf) { | |||
| uint8_t *p = NULL; | |||
| avio_close_dyn_buf(asf->pktbuf, &p); | |||
| asf->pktbuf = NULL; | |||
| av_free(p); | |||
| } | |||
| ffio_free_dyn_buf(&asf->pktbuf); | |||
| av_freep(&asf->buf); | |||
| av_free(asf); | |||
| } | |||
| @@ -23,6 +23,7 @@ | |||
| #include "libavcodec/bytestream.h" | |||
| #include "avio_internal.h" | |||
| #include "rtpdec_formats.h" | |||
| struct PayloadContext { | |||
| @@ -31,17 +32,9 @@ struct PayloadContext { | |||
| int bundled_audio; | |||
| }; | |||
| static void dv_free_dyn_buffer(AVIOContext **dyn_buf) | |||
| { | |||
| uint8_t *ptr_dyn_buffer; | |||
| avio_close_dyn_buf(*dyn_buf, &ptr_dyn_buffer); | |||
| av_free(ptr_dyn_buffer); | |||
| *dyn_buf = NULL; | |||
| } | |||
| static av_cold void dv_free_context(PayloadContext *data) | |||
| { | |||
| dv_free_dyn_buffer(&data->buf); | |||
| ffio_free_dyn_buf(&data->buf); | |||
| } | |||
| static av_cold int dv_sdp_parse_fmtp_config(AVFormatContext *s, | |||
| @@ -104,7 +97,7 @@ static int dv_handle_packet(AVFormatContext *ctx, PayloadContext *rtp_dv_ctx, | |||
| /* drop data of previous packets in case of non-continuous (lossy) packet stream */ | |||
| if (rtp_dv_ctx->buf && rtp_dv_ctx->timestamp != *timestamp) { | |||
| dv_free_dyn_buffer(&rtp_dv_ctx->buf); | |||
| ffio_free_dyn_buf(&rtp_dv_ctx->buf); | |||
| } | |||
| /* sanity check for size of input packet: 1 byte payload at least */ | |||
| @@ -21,6 +21,7 @@ | |||
| #include "libavcodec/get_bits.h" | |||
| #include "avformat.h" | |||
| #include "avio_internal.h" | |||
| #include "rtpdec_formats.h" | |||
| #define RTP_H261_PAYLOAD_HEADER_SIZE 4 | |||
| @@ -32,14 +33,6 @@ struct PayloadContext { | |||
| uint32_t timestamp; | |||
| }; | |||
| static void h261_free_dyn_buffer(AVIOContext **dyn_buf) | |||
| { | |||
| uint8_t *ptr_dyn_buffer; | |||
| avio_close_dyn_buf(*dyn_buf, &ptr_dyn_buffer); | |||
| av_free(ptr_dyn_buffer); | |||
| *dyn_buf = NULL; | |||
| } | |||
| static av_cold void h261_free_context(PayloadContext *pl_ctx) | |||
| { | |||
| /* return if context is invalid */ | |||
| @@ -47,9 +40,7 @@ static av_cold void h261_free_context(PayloadContext *pl_ctx) | |||
| return; | |||
| /* free buffer if it is valid */ | |||
| if (pl_ctx->buf) { | |||
| h261_free_dyn_buffer(&pl_ctx->buf); | |||
| } | |||
| ffio_free_dyn_buf(&pl_ctx->buf); | |||
| } | |||
| static int h261_handle_packet(AVFormatContext *ctx, PayloadContext *rtp_h261_ctx, | |||
| @@ -62,7 +53,7 @@ static int h261_handle_packet(AVFormatContext *ctx, PayloadContext *rtp_h261_ctx | |||
| /* drop data of previous packets in case of non-continuous (lossy) packet stream */ | |||
| if (rtp_h261_ctx->buf && rtp_h261_ctx->timestamp != *timestamp) { | |||
| h261_free_dyn_buffer(&rtp_h261_ctx->buf); | |||
| ffio_free_dyn_buf(&rtp_h261_ctx->buf); | |||
| rtp_h261_ctx->endbyte_bits = 0; | |||
| } | |||
| @@ -26,6 +26,7 @@ | |||
| */ | |||
| #include "avformat.h" | |||
| #include "avio_internal.h" | |||
| #include "rtpdec_formats.h" | |||
| #include "libavutil/attributes.h" | |||
| #include "libavutil/intreadwrite.h" | |||
| @@ -41,11 +42,7 @@ struct PayloadContext { | |||
| static void h263_free_context(PayloadContext *data) | |||
| { | |||
| if (data->buf) { | |||
| uint8_t *p; | |||
| avio_close_dyn_buf(data->buf, &p); | |||
| av_free(p); | |||
| } | |||
| ffio_free_dyn_buf(&data->buf); | |||
| } | |||
| static int h263_handle_packet(AVFormatContext *ctx, PayloadContext *data, | |||
| @@ -63,10 +60,7 @@ static int h263_handle_packet(AVFormatContext *ctx, PayloadContext *data, | |||
| if (data->buf && data->timestamp != *timestamp) { | |||
| /* Dropping old buffered, unfinished data */ | |||
| uint8_t *p; | |||
| avio_close_dyn_buf(data->buf, &p); | |||
| av_free(p); | |||
| data->buf = NULL; | |||
| ffio_free_dyn_buf(&data->buf); | |||
| data->endbyte_bits = 0; | |||
| } | |||
| @@ -20,6 +20,7 @@ | |||
| */ | |||
| #include "avformat.h" | |||
| #include "avio_internal.h" | |||
| #include "rtpdec.h" | |||
| #include "rtpdec_formats.h" | |||
| #include "libavutil/intreadwrite.h" | |||
| @@ -59,19 +60,9 @@ static const uint8_t default_quantizers[128] = { | |||
| 99, 99, 99, 99, 99, 99, 99, 99 | |||
| }; | |||
| static void free_frame(PayloadContext *jpeg) | |||
| { | |||
| if (jpeg->frame) { | |||
| uint8_t *p; | |||
| avio_close_dyn_buf(jpeg->frame, &p); | |||
| av_free(p); | |||
| jpeg->frame = NULL; | |||
| } | |||
| } | |||
| static void jpeg_free_context(PayloadContext *jpeg) | |||
| { | |||
| free_frame(jpeg); | |||
| ffio_free_dyn_buf(&jpeg->frame); | |||
| } | |||
| static int jpeg_create_huffman_table(PutByteContext *p, int table_class, | |||
| @@ -332,7 +323,7 @@ static int jpeg_parse_packet(AVFormatContext *ctx, PayloadContext *jpeg, | |||
| /* Skip the current frame in case of the end packet | |||
| * has been lost somewhere. */ | |||
| free_frame(jpeg); | |||
| ffio_free_dyn_buf(&jpeg->frame); | |||
| if ((ret = avio_open_dyn_buf(&jpeg->frame)) < 0) | |||
| return ret; | |||
| @@ -358,7 +349,7 @@ static int jpeg_parse_packet(AVFormatContext *ctx, PayloadContext *jpeg, | |||
| if (jpeg->timestamp != *timestamp) { | |||
| /* Skip the current frame if timestamp is incorrect. | |||
| * A start packet has been lost somewhere. */ | |||
| free_frame(jpeg); | |||
| ffio_free_dyn_buf(&jpeg->frame); | |||
| av_log(ctx, AV_LOG_ERROR, "RTP timestamps don't match.\n"); | |||
| return AVERROR_INVALIDDATA; | |||
| } | |||
| @@ -19,6 +19,7 @@ | |||
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |||
| */ | |||
| #include "avio_internal.h" | |||
| #include "rtpdec_formats.h" | |||
| #include "internal.h" | |||
| #include "libavutil/avstring.h" | |||
| @@ -33,11 +34,7 @@ struct PayloadContext { | |||
| static void latm_free_context(PayloadContext *data) | |||
| { | |||
| if (data->dyn_buf) { | |||
| uint8_t *p; | |||
| avio_close_dyn_buf(data->dyn_buf, &p); | |||
| av_free(p); | |||
| } | |||
| ffio_free_dyn_buf(&data->dyn_buf); | |||
| av_freep(&data->buf); | |||
| } | |||
| @@ -51,10 +48,7 @@ static int latm_parse_packet(AVFormatContext *ctx, PayloadContext *data, | |||
| if (buf) { | |||
| if (!data->dyn_buf || data->timestamp != *timestamp) { | |||
| av_freep(&data->buf); | |||
| if (data->dyn_buf) | |||
| avio_close_dyn_buf(data->dyn_buf, &data->buf); | |||
| data->dyn_buf = NULL; | |||
| av_freep(&data->buf); | |||
| ffio_free_dyn_buf(&data->dyn_buf); | |||
| data->timestamp = *timestamp; | |||
| if ((ret = avio_open_dyn_buf(&data->dyn_buf)) < 0) | |||
| @@ -22,6 +22,7 @@ | |||
| #include "libavutil/attributes.h" | |||
| #include "libavutil/intreadwrite.h" | |||
| #include "avio_internal.h" | |||
| #include "rtpdec_formats.h" | |||
| struct PayloadContext { | |||
| @@ -33,19 +34,9 @@ struct PayloadContext { | |||
| AVIOContext *fragment; | |||
| }; | |||
| static void free_fragment(PayloadContext *data) | |||
| { | |||
| if (data->fragment) { | |||
| uint8_t *p; | |||
| avio_close_dyn_buf(data->fragment, &p); | |||
| av_free(p); | |||
| data->fragment = NULL; | |||
| } | |||
| } | |||
| static void mpa_robust_free_context(PayloadContext *data) | |||
| { | |||
| free_fragment(data); | |||
| ffio_free_dyn_buf(&data->fragment); | |||
| av_free(data->split_buf); | |||
| } | |||
| @@ -154,7 +145,7 @@ static int mpa_robust_parse_packet(AVFormatContext *ctx, PayloadContext *data, | |||
| return 0; | |||
| } else if (!continuation) { /* && adu_size > len */ | |||
| /* First fragment */ | |||
| free_fragment(data); | |||
| ffio_free_dyn_buf(&data->fragment); | |||
| data->adu_size = adu_size; | |||
| data->cur_size = len; | |||
| @@ -177,7 +168,7 @@ static int mpa_robust_parse_packet(AVFormatContext *ctx, PayloadContext *data, | |||
| } | |||
| if (adu_size = data->adu_size || | |||
| data->timestamp != *timestamp) { | |||
| free_fragment(data); | |||
| ffio_free_dyn_buf(&data->fragment); | |||
| av_log(ctx, AV_LOG_ERROR, "Invalid packet received\n"); | |||
| return AVERROR_INVALIDDATA; | |||
| } | |||
| @@ -28,6 +28,7 @@ | |||
| #include <string.h> | |||
| #include "libavutil/intreadwrite.h" | |||
| #include "avio_internal.h" | |||
| #include "internal.h" | |||
| #include "rtp.h" | |||
| #include "rtpdec.h" | |||
| @@ -81,11 +82,7 @@ static int svq3_parse_packet (AVFormatContext *s, PayloadContext *sv, | |||
| if (start_packet) { | |||
| int res; | |||
| if (sv->pktbuf) { | |||
| uint8_t *tmp; | |||
| avio_close_dyn_buf(sv->pktbuf, &tmp); | |||
| av_free(tmp); | |||
| } | |||
| ffio_free_dyn_buf(&sv->pktbuf); | |||
| if ((res = avio_open_dyn_buf(&sv->pktbuf)) < 0) | |||
| return res; | |||
| sv->timestamp = *timestamp; | |||
| @@ -110,11 +107,7 @@ static int svq3_parse_packet (AVFormatContext *s, PayloadContext *sv, | |||
| static void svq3_extradata_free(PayloadContext *sv) | |||
| { | |||
| if (sv->pktbuf) { | |||
| uint8_t *buf; | |||
| avio_close_dyn_buf(sv->pktbuf, &buf); | |||
| av_free(buf); | |||
| } | |||
| ffio_free_dyn_buf(&sv->pktbuf); | |||
| } | |||
| RTPDynamicProtocolHandler ff_svq3_dynamic_handler = { | |||
| @@ -29,6 +29,7 @@ | |||
| #include "libavcodec/bytestream.h" | |||
| #include "avio_internal.h" | |||
| #include "rtpdec_formats.h" | |||
| struct PayloadContext { | |||
| @@ -52,22 +53,12 @@ struct PayloadContext { | |||
| int got_keyframe; | |||
| }; | |||
| static void vp8_free_buffer(PayloadContext *vp8) | |||
| { | |||
| uint8_t *tmp; | |||
| if (!vp8->data) | |||
| return; | |||
| avio_close_dyn_buf(vp8->data, &tmp); | |||
| av_free(tmp); | |||
| vp8->data = NULL; | |||
| } | |||
| static int vp8_broken_sequence(AVFormatContext *ctx, PayloadContext *vp8, | |||
| const char *msg) | |||
| { | |||
| vp8->sequence_ok = 0; | |||
| av_log(ctx, AV_LOG_WARNING, "%s", msg); | |||
| vp8_free_buffer(vp8); | |||
| ffio_free_dyn_buf(&vp8->data); | |||
| return AVERROR(EAGAIN); | |||
| } | |||
| @@ -150,7 +141,7 @@ static int vp8_handle_packet(AVFormatContext *ctx, PayloadContext *vp8, | |||
| int res; | |||
| int non_key = buf[0] & 0x01; | |||
| if (!non_key) { | |||
| vp8_free_buffer(vp8); | |||
| ffio_free_dyn_buf(&vp8->data); | |||
| // Keyframe, decoding ok again | |||
| vp8->sequence_ok = 1; | |||
| vp8->sequence_dirty = 0; | |||
| @@ -205,7 +196,7 @@ static int vp8_handle_packet(AVFormatContext *ctx, PayloadContext *vp8, | |||
| old_timestamp = vp8->timestamp; | |||
| } else { | |||
| // Shouldn't happen | |||
| vp8_free_buffer(vp8); | |||
| ffio_free_dyn_buf(&vp8->data); | |||
| } | |||
| } | |||
| } | |||
| @@ -277,7 +268,7 @@ static av_cold int vp8_init(AVFormatContext *s, int st_index, PayloadContext *vp | |||
| static void vp8_free_context(PayloadContext *vp8) | |||
| { | |||
| vp8_free_buffer(vp8); | |||
| ffio_free_dyn_buf(&vp8->data); | |||
| } | |||
| static int vp8_need_keyframe(PayloadContext *vp8) | |||
| @@ -33,6 +33,7 @@ | |||
| #include "libavutil/base64.h" | |||
| #include "libavcodec/bytestream.h" | |||
| #include "avio_internal.h" | |||
| #include "internal.h" | |||
| #include "rtpdec.h" | |||
| #include "rtpdec_formats.h" | |||
| @@ -49,19 +50,9 @@ struct PayloadContext { | |||
| int split_pkts; | |||
| }; | |||
| static void free_fragment(PayloadContext * data) | |||
| { | |||
| if (data->fragment) { | |||
| uint8_t* p; | |||
| avio_close_dyn_buf(data->fragment, &p); | |||
| av_free(p); | |||
| data->fragment = NULL; | |||
| } | |||
| } | |||
| static void xiph_free_context(PayloadContext * data) | |||
| { | |||
| free_fragment(data); | |||
| ffio_free_dyn_buf(&data->fragment); | |||
| av_freep(&data->split_buf); | |||
| } | |||
| @@ -168,7 +159,7 @@ static int xiph_handle_packet(AVFormatContext *ctx, PayloadContext *data, | |||
| int res; | |||
| // end packet has been lost somewhere, so drop buffered data | |||
| free_fragment(data); | |||
| ffio_free_dyn_buf(&data->fragment); | |||
| if((res = avio_open_dyn_buf(&data->fragment)) < 0) | |||
| return res; | |||
| @@ -181,7 +172,7 @@ static int xiph_handle_packet(AVFormatContext *ctx, PayloadContext *data, | |||
| if (data->timestamp != *timestamp) { | |||
| // skip if fragmented timestamp is incorrect; | |||
| // a start packet has been lost somewhere | |||
| free_fragment(data); | |||
| ffio_free_dyn_buf(&data->fragment); | |||
| av_log(ctx, AV_LOG_ERROR, "RTP timestamps don't match!\n"); | |||
| return AVERROR_INVALIDDATA; | |||
| } | |||