avio: make url_open_dyn_packet_buf internal.

It doesn't look fit to be a part of the public API.

Adding a temporary hack to ffserver to be able to use it, should be
cleaned up when somebody is up for it.
oldabi
Anton Khirnov 14 years ago
parent 6dc7d80de7
commit 403ee835e7
  1. 6
      ffserver.c
  2. 17
      libavformat/avio.h
  3. 11
      libavformat/avio_internal.h
  4. 6
      libavformat/aviobuf.c
  5. 3
      libavformat/movenchint.c
  6. 2
      libavformat/rtpdec.c
  7. 3
      libavformat/rtpenc_chain.c
  8. 5
      libavformat/rtspenc.c

@ -33,6 +33,8 @@
#include "libavformat/os_support.h" #include "libavformat/os_support.h"
#include "libavformat/rtpdec.h" #include "libavformat/rtpdec.h"
#include "libavformat/rtsp.h" #include "libavformat/rtsp.h"
// XXX for ffio_open_dyn_packet_buffer, to be removed
#include "libavformat/avio_internal.h"
#include "libavutil/avstring.h" #include "libavutil/avstring.h"
#include "libavutil/lfg.h" #include "libavutil/lfg.h"
#include "libavutil/random_seed.h" #include "libavutil/random_seed.h"
@ -2389,7 +2391,7 @@ static int http_prepare_data(HTTPContext *c)
max_packet_size = RTSP_TCP_MAX_PACKET_SIZE; max_packet_size = RTSP_TCP_MAX_PACKET_SIZE;
else else
max_packet_size = url_get_max_packet_size(c->rtp_handles[c->packet_stream_index]); max_packet_size = url_get_max_packet_size(c->rtp_handles[c->packet_stream_index]);
ret = url_open_dyn_packet_buf(&ctx->pb, max_packet_size); ret = ffio_open_dyn_packet_buf(&ctx->pb, max_packet_size);
} else { } else {
ret = avio_open_dyn_buf(&ctx->pb); ret = avio_open_dyn_buf(&ctx->pb);
} }
@ -3444,7 +3446,7 @@ static int rtp_new_av_stream(HTTPContext *c,
c->stream->filename, stream_index, c->protocol); c->stream->filename, stream_index, c->protocol);
/* normally, no packets should be output here, but the packet size may be checked */ /* normally, no packets should be output here, but the packet size may be checked */
if (url_open_dyn_packet_buf(&ctx->pb, max_packet_size) < 0) { if (ffio_open_dyn_packet_buf(&ctx->pb, max_packet_size) < 0) {
/* XXX: close stream */ /* XXX: close stream */
goto fail; goto fail;
} }

@ -448,6 +448,7 @@ attribute_deprecated int url_fprintf(AVIOContext *s, const char *fmt, ...);
#endif #endif
attribute_deprecated void put_flush_packet(AVIOContext *s); attribute_deprecated void put_flush_packet(AVIOContext *s);
attribute_deprecated int url_open_dyn_buf(AVIOContext **s); attribute_deprecated int url_open_dyn_buf(AVIOContext **s);
attribute_deprecated int url_open_dyn_packet_buf(AVIOContext **s, int max_packet_size);
attribute_deprecated int url_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer); attribute_deprecated int url_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer);
/** /**
* @} * @}
@ -684,22 +685,10 @@ attribute_deprecated int url_close_buf(AVIOContext *s);
*/ */
int avio_open_dyn_buf(AVIOContext **s); int avio_open_dyn_buf(AVIOContext **s);
/**
* Open a write only packetized memory stream with a maximum packet
* size of 'max_packet_size'. The stream is stored in a memory buffer
* with a big endian 4 byte header giving the packet size in bytes.
*
* @param s new IO context
* @param max_packet_size maximum packet size (must be > 0)
* @return zero if no error.
*/
int url_open_dyn_packet_buf(AVIOContext **s, int max_packet_size);
/** /**
* Return the written size and a pointer to the buffer. The buffer * Return the written size and a pointer to the buffer. The buffer
* must be freed with av_free(). If the buffer is opened with * must be freed with av_free().
* avio_open_dyn_buf, then padding of FF_INPUT_BUFFER_PADDING_SIZE is * Padding of FF_INPUT_BUFFER_PADDING_SIZE is added to the buffer.
* added; if opened with url_open_dyn_packet_buf, no padding is added.
* *
* @param s IO context * @param s IO context
* @param pbuffer pointer to a byte buffer * @param pbuffer pointer to a byte buffer

@ -81,4 +81,15 @@ unsigned long ffio_get_checksum(AVIOContext *s);
unsigned long ff_crc04C11DB7_update(unsigned long checksum, const uint8_t *buf, unsigned long ff_crc04C11DB7_update(unsigned long checksum, const uint8_t *buf,
unsigned int len); unsigned int len);
/**
* Open a write only packetized memory stream with a maximum packet
* size of 'max_packet_size'. The stream is stored in a memory buffer
* with a big endian 4 byte header giving the packet size in bytes.
*
* @param s new IO context
* @param max_packet_size maximum packet size (must be > 0)
* @return zero if no error.
*/
int ffio_open_dyn_packet_buf(AVIOContext **s, int max_packet_size);
#endif // AVFORMAT_AVIO_INTERNAL_H #endif // AVFORMAT_AVIO_INTERNAL_H

@ -423,6 +423,10 @@ int url_open_dyn_buf(AVIOContext **s)
{ {
return avio_open_dyn_buf(s); return avio_open_dyn_buf(s);
} }
int url_open_dyn_packet_buf(AVIOContext **s, int max_packet_size)
{
return ffio_open_dyn_packet_buf(s, max_packet_size);
}
int url_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer) int url_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer)
{ {
return avio_close_dyn_buf(s, pbuffer); return avio_close_dyn_buf(s, pbuffer);
@ -1160,7 +1164,7 @@ int avio_open_dyn_buf(AVIOContext **s)
return url_open_dyn_buf_internal(s, 0); return url_open_dyn_buf_internal(s, 0);
} }
int url_open_dyn_packet_buf(AVIOContext **s, int max_packet_size) int ffio_open_dyn_packet_buf(AVIOContext **s, int max_packet_size)
{ {
if (max_packet_size <= 0) if (max_packet_size <= 0)
return -1; return -1;

@ -23,6 +23,7 @@
#include "libavutil/intreadwrite.h" #include "libavutil/intreadwrite.h"
#include "internal.h" #include "internal.h"
#include "rtpenc_chain.h" #include "rtpenc_chain.h"
#include "avio_internal.h"
int ff_mov_init_hinting(AVFormatContext *s, int index, int src_index) int ff_mov_init_hinting(AVFormatContext *s, int index, int src_index)
{ {
@ -409,7 +410,7 @@ int ff_mov_add_hinted_packet(AVFormatContext *s, AVPacket *pkt,
/* Fetch the output from the RTP muxer, open a new output buffer /* Fetch the output from the RTP muxer, open a new output buffer
* for next time. */ * for next time. */
size = avio_close_dyn_buf(rtp_ctx->pb, &buf); size = avio_close_dyn_buf(rtp_ctx->pb, &buf);
if ((ret = url_open_dyn_packet_buf(&rtp_ctx->pb, if ((ret = ffio_open_dyn_packet_buf(&rtp_ctx->pb,
RTP_MAX_PACKET_SIZE)) < 0) RTP_MAX_PACKET_SIZE)) < 0)
goto done; goto done;

@ -41,7 +41,7 @@
buffer to 'rtp_write_packet' contains all the packets for ONE buffer to 'rtp_write_packet' contains all the packets for ONE
frame. Each packet should have a four byte header containing frame. Each packet should have a four byte header containing
the length in big endian format (same trick as the length in big endian format (same trick as
'url_open_dyn_packet_buf') 'ffio_open_dyn_packet_buf')
*/ */
static RTPDynamicProtocolHandler ff_realmedia_mp3_dynamic_handler = { static RTPDynamicProtocolHandler ff_realmedia_mp3_dynamic_handler = {

@ -21,6 +21,7 @@
#include "avformat.h" #include "avformat.h"
#include "rtpenc_chain.h" #include "rtpenc_chain.h"
#include "avio_internal.h"
AVFormatContext *ff_rtp_chain_mux_open(AVFormatContext *s, AVStream *st, AVFormatContext *ff_rtp_chain_mux_open(AVFormatContext *s, AVStream *st,
URLContext *handle, int packet_size) URLContext *handle, int packet_size)
@ -55,7 +56,7 @@ AVFormatContext *ff_rtp_chain_mux_open(AVFormatContext *s, AVStream *st,
if (handle) { if (handle) {
url_fdopen(&rtpctx->pb, handle); url_fdopen(&rtpctx->pb, handle);
} else } else
url_open_dyn_packet_buf(&rtpctx->pb, packet_size); ffio_open_dyn_packet_buf(&rtpctx->pb, packet_size);
ret = av_write_header(rtpctx); ret = av_write_header(rtpctx);
if (ret) { if (ret) {

@ -29,6 +29,7 @@
#include "os_support.h" #include "os_support.h"
#include "rtsp.h" #include "rtsp.h"
#include "internal.h" #include "internal.h"
#include "avio_internal.h"
#include "libavutil/intreadwrite.h" #include "libavutil/intreadwrite.h"
#include "libavutil/avstring.h" #include "libavutil/avstring.h"
@ -142,7 +143,7 @@ static int tcp_write_packet(AVFormatContext *s, RTSPStream *rtsp_st)
int id; int id;
/* The interleaving header is exactly 4 bytes, which happens to be /* The interleaving header is exactly 4 bytes, which happens to be
* the same size as the packet length header from * the same size as the packet length header from
* url_open_dyn_packet_buf. So by writing the interleaving header * ffio_open_dyn_packet_buf. So by writing the interleaving header
* over these bytes, we get a consecutive interleaved packet * over these bytes, we get a consecutive interleaved packet
* that can be written in one call. */ * that can be written in one call. */
interleaved_packet = interleave_header = ptr; interleaved_packet = interleave_header = ptr;
@ -162,7 +163,7 @@ static int tcp_write_packet(AVFormatContext *s, RTSPStream *rtsp_st)
size -= packet_len; size -= packet_len;
} }
av_free(buf); av_free(buf);
url_open_dyn_packet_buf(&rtpctx->pb, RTSP_TCP_MAX_PACKET_SIZE); ffio_open_dyn_packet_buf(&rtpctx->pb, RTSP_TCP_MAX_PACKET_SIZE);
return 0; return 0;
} }

Loading…
Cancel
Save