mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-08 13:22:53 +02:00
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.
This commit is contained in:
parent
6dc7d80de7
commit
403ee835e7
@ -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…
Reference in New Issue
Block a user