Use dynamically allocated ByteIOContext in AVFormatContext

patch by: Björn Axelsson, bjorn d axelsson a intinor d se
thread: [PATCH] Remove static ByteIOContexts, 06 nov 2007

Originally committed as revision 11071 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Björn Axelsson 2007-11-21 07:41:00 +00:00 committed by Andreas Öman
parent 79815f622d
commit 899681cd1d
89 changed files with 873 additions and 824 deletions

View File

@ -920,9 +920,9 @@ static void print_report(AVFormatContext **output_files,
oc = output_files[0]; oc = output_files[0];
total_size = url_fsize(&oc->pb); total_size = url_fsize(oc->pb);
if(total_size<0) // FIXME improve url_fsize() so it works with non seekable output too if(total_size<0) // FIXME improve url_fsize() so it works with non seekable output too
total_size= url_ftell(&oc->pb); total_size= url_ftell(oc->pb);
buf[0] = '\0'; buf[0] = '\0';
ti1 = 1e10; ti1 = 1e10;
@ -1948,7 +1948,7 @@ static int av_encode(AVFormatContext **output_files,
break; break;
/* finish if limit size exhausted */ /* finish if limit size exhausted */
if (limit_filesize != 0 && limit_filesize < url_ftell(&output_files[0]->pb)) if (limit_filesize != 0 && limit_filesize < url_ftell(output_files[0]->pb))
break; break;
/* read a frame from it and output it in the fifo */ /* read a frame from it and output it in the fifo */
@ -3835,7 +3835,7 @@ static int av_exit()
AVFormatContext *s = output_files[i]; AVFormatContext *s = output_files[i];
int j; int j;
if (!(s->oformat->flags & AVFMT_NOFILE)) if (!(s->oformat->flags & AVFMT_NOFILE))
url_fclose(&s->pb); url_fclose(s->pb);
for(j=0;j<s->nb_streams;j++) { for(j=0;j<s->nb_streams;j++) {
av_free(s->streams[j]->codec); av_free(s->streams[j]->codec);
av_free(s->streams[j]); av_free(s->streams[j]);

View File

@ -1912,7 +1912,8 @@ static int decode_thread(void *arg)
ret = -1; ret = -1;
goto fail; goto fail;
} }
ic->pb.eof_reached= 0; //FIXME hack, ffplay maybe should not use url_feof() to test for the end if(ic->pb)
ic->pb->eof_reached= 0; //FIXME hack, ffplay maybe should not use url_feof() to test for the end
/* if seeking requested, we execute it */ /* if seeking requested, we execute it */
if (start_time != AV_NOPTS_VALUE) { if (start_time != AV_NOPTS_VALUE) {
@ -1980,7 +1981,7 @@ static int decode_thread(void *arg)
#if defined(CONFIG_RTSP_DEMUXER) || defined(CONFIG_MMSH_PROTOCOL) #if defined(CONFIG_RTSP_DEMUXER) || defined(CONFIG_MMSH_PROTOCOL)
if (is->paused && if (is->paused &&
(!strcmp(ic->iformat->name, "rtsp") || (!strcmp(ic->iformat->name, "rtsp") ||
!strcmp(url_fileno(&ic->pb)->prot->name, "mmsh"))) { (ic->pb && !strcmp(url_fileno(ic->pb)->prot->name, "mmsh")))) {
/* wait 10 ms to avoid trying to get another packet */ /* wait 10 ms to avoid trying to get another packet */
/* XXX: horrible */ /* XXX: horrible */
SDL_Delay(10); SDL_Delay(10);
@ -2023,14 +2024,14 @@ static int decode_thread(void *arg)
if (is->audioq.size > MAX_AUDIOQ_SIZE || if (is->audioq.size > MAX_AUDIOQ_SIZE ||
is->videoq.size > MAX_VIDEOQ_SIZE || is->videoq.size > MAX_VIDEOQ_SIZE ||
is->subtitleq.size > MAX_SUBTITLEQ_SIZE || is->subtitleq.size > MAX_SUBTITLEQ_SIZE ||
url_feof(&ic->pb)) { url_feof(ic->pb)) {
/* wait 10 ms */ /* wait 10 ms */
SDL_Delay(10); SDL_Delay(10);
continue; continue;
} }
ret = av_read_frame(ic, pkt); ret = av_read_frame(ic, pkt);
if (ret < 0) { if (ret < 0) {
if (url_ferror(&ic->pb) == 0) { if (url_ferror(ic->pb) == 0) {
SDL_Delay(100); /* wait for user event */ SDL_Delay(100); /* wait for user event */
continue; continue;
} else } else
@ -2282,7 +2283,7 @@ static void event_loop(void)
do_seek: do_seek:
if (cur_stream) { if (cur_stream) {
if (seek_by_bytes) { if (seek_by_bytes) {
pos = url_ftell(&cur_stream->ic->pb); pos = url_ftell(cur_stream->ic->pb);
if (cur_stream->ic->bit_rate) if (cur_stream->ic->bit_rate)
incr *= cur_stream->ic->bit_rate / 60.0; incr *= cur_stream->ic->bit_rate / 60.0;
else else

View File

@ -752,7 +752,7 @@ static void close_connection(HTTPContext *c)
/* prepare header */ /* prepare header */
if (url_open_dyn_buf(&ctx->pb) >= 0) { if (url_open_dyn_buf(&ctx->pb) >= 0) {
av_write_trailer(ctx); av_write_trailer(ctx);
url_close_dyn_buf(&ctx->pb, &c->pb_buffer); url_close_dyn_buf(ctx->pb, &c->pb_buffer);
} }
} }
} }
@ -1596,9 +1596,9 @@ static void compute_stats(HTTPContext *c)
char *p; char *p;
time_t ti; time_t ti;
int i, len; int i, len;
ByteIOContext pb1, *pb = &pb1; ByteIOContext *pb;
if (url_open_dyn_buf(pb) < 0) { if (url_open_dyn_buf(&pb) < 0) {
/* XXX: return an error ? */ /* XXX: return an error ? */
c->buffer_ptr = c->buffer; c->buffer_ptr = c->buffer;
c->buffer_end = c->buffer; c->buffer_end = c->buffer;
@ -2032,13 +2032,13 @@ static int http_prepare_data(HTTPContext *c)
/* XXX: potential leak */ /* XXX: potential leak */
return -1; return -1;
} }
c->fmt_ctx.pb.is_streamed = 1; c->fmt_ctx.pb->is_streamed = 1;
av_set_parameters(&c->fmt_ctx, NULL); av_set_parameters(&c->fmt_ctx, NULL);
if (av_write_header(&c->fmt_ctx) < 0) if (av_write_header(&c->fmt_ctx) < 0)
return -1; return -1;
len = url_close_dyn_buf(&c->fmt_ctx.pb, &c->pb_buffer); len = url_close_dyn_buf(c->fmt_ctx.pb, &c->pb_buffer);
c->buffer_ptr = c->pb_buffer; c->buffer_ptr = c->pb_buffer;
c->buffer_end = c->pb_buffer + len; c->buffer_end = c->pb_buffer + len;
@ -2182,7 +2182,7 @@ static int http_prepare_data(HTTPContext *c)
if (av_write_frame(ctx, &pkt)) if (av_write_frame(ctx, &pkt))
c->state = HTTPSTATE_SEND_DATA_TRAILER; c->state = HTTPSTATE_SEND_DATA_TRAILER;
len = url_close_dyn_buf(&ctx->pb, &c->pb_buffer); len = url_close_dyn_buf(ctx->pb, &c->pb_buffer);
c->cur_frame_bytes = len; c->cur_frame_bytes = len;
c->buffer_ptr = c->pb_buffer; c->buffer_ptr = c->pb_buffer;
c->buffer_end = c->pb_buffer + len; c->buffer_end = c->pb_buffer + len;
@ -2208,7 +2208,7 @@ static int http_prepare_data(HTTPContext *c)
return -1; return -1;
} }
av_write_trailer(ctx); av_write_trailer(ctx);
len = url_close_dyn_buf(&ctx->pb, &c->pb_buffer); len = url_close_dyn_buf(ctx->pb, &c->pb_buffer);
c->buffer_ptr = c->pb_buffer; c->buffer_ptr = c->pb_buffer;
c->buffer_end = c->pb_buffer + len; c->buffer_end = c->pb_buffer + len;
@ -2261,7 +2261,7 @@ static int http_send_data(HTTPContext *c)
if (c->rtp_protocol == RTSP_PROTOCOL_RTP_TCP) { if (c->rtp_protocol == RTSP_PROTOCOL_RTP_TCP) {
/* RTP packets are sent inside the RTSP TCP connection */ /* RTP packets are sent inside the RTSP TCP connection */
ByteIOContext pb1, *pb = &pb1; ByteIOContext *pb;
int interleaved_index, size; int interleaved_index, size;
uint8_t header[4]; uint8_t header[4];
HTTPContext *rtsp_c; HTTPContext *rtsp_c;
@ -2273,7 +2273,7 @@ static int http_send_data(HTTPContext *c)
/* if already sending something, then wait. */ /* if already sending something, then wait. */
if (rtsp_c->state != RTSPSTATE_WAIT_REQUEST) if (rtsp_c->state != RTSPSTATE_WAIT_REQUEST)
break; break;
if (url_open_dyn_buf(pb) < 0) if (url_open_dyn_buf(&pb) < 0)
goto fail1; goto fail1;
interleaved_index = c->packet_stream_index * 2; interleaved_index = c->packet_stream_index * 2;
/* RTCP packets are sent at odd indexes */ /* RTCP packets are sent at odd indexes */
@ -2432,14 +2432,13 @@ static int http_receive_data(HTTPContext *c)
/* We have a header in our hands that contains useful data */ /* We have a header in our hands that contains useful data */
AVFormatContext s; AVFormatContext s;
AVInputFormat *fmt_in; AVInputFormat *fmt_in;
ByteIOContext *pb = &s.pb;
int i; int i;
memset(&s, 0, sizeof(s)); memset(&s, 0, sizeof(s));
url_open_buf(pb, c->buffer, c->buffer_end - c->buffer, URL_RDONLY); url_open_buf(&s.pb, c->buffer, c->buffer_end - c->buffer, URL_RDONLY);
pb->buf_end = c->buffer_end; /* ?? */ s.pb->buf_end = c->buffer_end; /* ?? */
pb->is_streamed = 1; s.pb->is_streamed = 1;
/* use feed output format name to find corresponding input format */ /* use feed output format name to find corresponding input format */
fmt_in = av_find_input_format(feed->fmt->name); fmt_in = av_find_input_format(feed->fmt->name);
@ -2553,7 +2552,6 @@ static int rtsp_parse_request(HTTPContext *c)
char url[1024]; char url[1024];
char protocol[32]; char protocol[32];
char line[1024]; char line[1024];
ByteIOContext pb1;
int len; int len;
RTSPHeader header1, *header = &header1; RTSPHeader header1, *header = &header1;
@ -2568,8 +2566,7 @@ static int rtsp_parse_request(HTTPContext *c)
av_strlcpy(c->url, url, sizeof(c->url)); av_strlcpy(c->url, url, sizeof(c->url));
av_strlcpy(c->protocol, protocol, sizeof(c->protocol)); av_strlcpy(c->protocol, protocol, sizeof(c->protocol));
c->pb = &pb1; if (url_open_dyn_buf(&c->pb) < 0) {
if (url_open_dyn_buf(c->pb) < 0) {
/* XXX: cannot do more */ /* XXX: cannot do more */
c->pb = NULL; /* safety */ c->pb = NULL; /* safety */
return -1; return -1;
@ -3164,7 +3161,7 @@ static int rtp_new_av_stream(HTTPContext *c,
av_free(ctx); av_free(ctx);
return -1; return -1;
} }
url_close_dyn_buf(&ctx->pb, &dummy_buf); url_close_dyn_buf(ctx->pb, &dummy_buf);
av_free(dummy_buf); av_free(dummy_buf);
c->rtp_ctx[stream_index] = ctx; c->rtp_ctx[stream_index] = ctx;
@ -3479,7 +3476,7 @@ static void build_feed_streams(void)
} }
/* XXX: need better api */ /* XXX: need better api */
av_freep(&s->priv_data); av_freep(&s->priv_data);
url_fclose(&s->pb); url_fclose(s->pb);
} }
/* get feed size and write index */ /* get feed size and write index */
fd = open(feed->feed_filename, O_RDONLY); fd = open(feed->feed_filename, O_RDONLY);

View File

@ -92,7 +92,7 @@ static int fourxm_probe(AVProbeData *p)
static int fourxm_read_header(AVFormatContext *s, static int fourxm_read_header(AVFormatContext *s,
AVFormatParameters *ap) AVFormatParameters *ap)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
unsigned int fourcc_tag; unsigned int fourcc_tag;
unsigned int size; unsigned int size;
int header_size; int header_size;
@ -224,7 +224,7 @@ static int fourxm_read_packet(AVFormatContext *s,
AVPacket *pkt) AVPacket *pkt)
{ {
FourxmDemuxContext *fourxm = s->priv_data; FourxmDemuxContext *fourxm = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
unsigned int fourcc_tag; unsigned int fourcc_tag;
unsigned int size, out_size; unsigned int size, out_size;
int ret = 0; int ret = 0;
@ -235,7 +235,7 @@ static int fourxm_read_packet(AVFormatContext *s,
while (!packet_read) { while (!packet_read) {
if ((ret = get_buffer(&s->pb, header, 8)) < 0) if ((ret = get_buffer(s->pb, header, 8)) < 0)
return ret; return ret;
fourcc_tag = AV_RL32(&header[0]); fourcc_tag = AV_RL32(&header[0]);
size = AV_RL32(&header[4]); size = AV_RL32(&header[4]);
@ -265,9 +265,9 @@ static int fourxm_read_packet(AVFormatContext *s,
return AVERROR(EIO); return AVERROR(EIO);
pkt->stream_index = fourxm->video_stream_index; pkt->stream_index = fourxm->video_stream_index;
pkt->pts = fourxm->video_pts; pkt->pts = fourxm->video_pts;
pkt->pos = url_ftell(&s->pb); pkt->pos = url_ftell(s->pb);
memcpy(pkt->data, header, 8); memcpy(pkt->data, header, 8);
ret = get_buffer(&s->pb, &pkt->data[8], size); ret = get_buffer(s->pb, &pkt->data[8], size);
if (ret < 0) if (ret < 0)
av_free_packet(pkt); av_free_packet(pkt);
@ -282,7 +282,7 @@ static int fourxm_read_packet(AVFormatContext *s,
size-=8; size-=8;
if (track_number == fourxm->selected_track) { if (track_number == fourxm->selected_track) {
ret= av_get_packet(&s->pb, pkt, size); ret= av_get_packet(s->pb, pkt, size);
if(ret<0) if(ret<0)
return AVERROR(EIO); return AVERROR(EIO);
pkt->stream_index = pkt->stream_index =

View File

@ -84,7 +84,7 @@ static int adts_write_frame_header(AVFormatContext *s, int size)
put_bits(&pb, 2, 0); /* number_of_raw_data_blocks_in_frame */ put_bits(&pb, 2, 0); /* number_of_raw_data_blocks_in_frame */
flush_put_bits(&pb); flush_put_bits(&pb);
put_buffer(&s->pb, buf, ADTS_HEADER_SIZE); put_buffer(s->pb, buf, ADTS_HEADER_SIZE);
return 0; return 0;
} }
@ -92,7 +92,7 @@ static int adts_write_frame_header(AVFormatContext *s, int size)
static int adts_write_packet(AVFormatContext *s, AVPacket *pkt) static int adts_write_packet(AVFormatContext *s, AVPacket *pkt)
{ {
ADTSContext *adts = s->priv_data; ADTSContext *adts = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
if (!pkt->size) if (!pkt->size)
return 0; return 0;

View File

@ -161,7 +161,7 @@ typedef struct {
static int aiff_write_header(AVFormatContext *s) static int aiff_write_header(AVFormatContext *s)
{ {
AIFFOutputContext *aiff = s->priv_data; AIFFOutputContext *aiff = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVCodecContext *enc = s->streams[0]->codec; AVCodecContext *enc = s->streams[0]->codec;
AVExtFloat sample_rate; AVExtFloat sample_rate;
int aifc = 0; int aifc = 0;
@ -231,14 +231,14 @@ static int aiff_write_header(AVFormatContext *s)
static int aiff_write_packet(AVFormatContext *s, AVPacket *pkt) static int aiff_write_packet(AVFormatContext *s, AVPacket *pkt)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
put_buffer(pb, pkt->data, pkt->size); put_buffer(pb, pkt->data, pkt->size);
return 0; return 0;
} }
static int aiff_write_trailer(AVFormatContext *s) static int aiff_write_trailer(AVFormatContext *s)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AIFFOutputContext *aiff = s->priv_data; AIFFOutputContext *aiff = s->priv_data;
AVCodecContext *enc = s->streams[0]->codec; AVCodecContext *enc = s->streams[0]->codec;
@ -250,7 +250,7 @@ static int aiff_write_trailer(AVFormatContext *s)
end_size++; end_size++;
} }
if (!url_is_streamed(&s->pb)) { if (!url_is_streamed(s->pb)) {
/* File length */ /* File length */
url_fseek(pb, aiff->form, SEEK_SET); url_fseek(pb, aiff->form, SEEK_SET);
put_be32(pb, (uint32_t)(file_size - aiff->form - 4)); put_be32(pb, (uint32_t)(file_size - aiff->form - 4));
@ -293,7 +293,7 @@ static int aiff_read_header(AVFormatContext *s,
offset_t offset = 0; offset_t offset = 0;
uint32_t tag; uint32_t tag;
unsigned version = AIFF_C_VERSION1; unsigned version = AIFF_C_VERSION1;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream * st = s->streams[0]; AVStream * st = s->streams[0];
/* check FORM header */ /* check FORM header */
@ -399,11 +399,11 @@ static int aiff_read_packet(AVFormatContext *s,
int res; int res;
/* End of stream may be reached */ /* End of stream may be reached */
if (url_feof(&s->pb)) if (url_feof(s->pb))
return AVERROR(EIO); return AVERROR(EIO);
/* Now for that packet */ /* Now for that packet */
res = av_get_packet(&s->pb, pkt, (MAX_SIZE / st->codec->block_align) * st->codec->block_align); res = av_get_packet(s->pb, pkt, (MAX_SIZE / st->codec->block_align) * st->codec->block_align);
if (res < 0) if (res < 0)
return res; return res;

View File

@ -33,7 +33,7 @@ static const char AMRWB_header [] = "#!AMR-WB\n";
#ifdef CONFIG_MUXERS #ifdef CONFIG_MUXERS
static int amr_write_header(AVFormatContext *s) static int amr_write_header(AVFormatContext *s)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVCodecContext *enc = s->streams[0]->codec; AVCodecContext *enc = s->streams[0]->codec;
s->priv_data = NULL; s->priv_data = NULL;
@ -56,8 +56,8 @@ static int amr_write_header(AVFormatContext *s)
static int amr_write_packet(AVFormatContext *s, AVPacket *pkt) static int amr_write_packet(AVFormatContext *s, AVPacket *pkt)
{ {
put_buffer(&s->pb, pkt->data, pkt->size); put_buffer(s->pb, pkt->data, pkt->size);
put_flush_packet(&s->pb); put_flush_packet(s->pb);
return 0; return 0;
} }
#endif /* CONFIG_MUXERS */ #endif /* CONFIG_MUXERS */
@ -78,7 +78,7 @@ static int amr_probe(AVProbeData *p)
static int amr_read_header(AVFormatContext *s, static int amr_read_header(AVFormatContext *s,
AVFormatParameters *ap) AVFormatParameters *ap)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream *st; AVStream *st;
uint8_t header[9]; uint8_t header[9];
@ -120,13 +120,13 @@ static int amr_read_packet(AVFormatContext *s,
AVCodecContext *enc = s->streams[0]->codec; AVCodecContext *enc = s->streams[0]->codec;
int read, size = 0, toc, mode; int read, size = 0, toc, mode;
if (url_feof(&s->pb)) if (url_feof(s->pb))
{ {
return AVERROR(EIO); return AVERROR(EIO);
} }
//FIXME this is wrong, this should rather be in a AVParset //FIXME this is wrong, this should rather be in a AVParset
toc=get_byte(&s->pb); toc=get_byte(s->pb);
mode = (toc >> 3) & 0x0F; mode = (toc >> 3) & 0x0F;
if (enc->codec_id == CODEC_ID_AMR_NB) if (enc->codec_id == CODEC_ID_AMR_NB)
@ -152,10 +152,10 @@ static int amr_read_packet(AVFormatContext *s,
} }
pkt->stream_index = 0; pkt->stream_index = 0;
pkt->pos= url_ftell(&s->pb); pkt->pos= url_ftell(s->pb);
pkt->data[0]=toc; pkt->data[0]=toc;
pkt->duration= enc->codec_id == CODEC_ID_AMR_NB ? 160 : 320; pkt->duration= enc->codec_id == CODEC_ID_AMR_NB ? 160 : 320;
read = get_buffer(&s->pb, pkt->data+1, size-1); read = get_buffer(s->pb, pkt->data+1, size-1);
if (read != size-1) if (read != size-1)
{ {

View File

@ -32,7 +32,7 @@ static int apc_probe(AVProbeData *p)
static int apc_read_header(AVFormatContext *s, AVFormatParameters *ap) static int apc_read_header(AVFormatContext *s, AVFormatParameters *ap)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream *st; AVStream *st;
get_le32(pb); /* CRYO */ get_le32(pb); /* CRYO */
@ -74,7 +74,7 @@ static int apc_read_header(AVFormatContext *s, AVFormatParameters *ap)
static int apc_read_packet(AVFormatContext *s, AVPacket *pkt) static int apc_read_packet(AVFormatContext *s, AVPacket *pkt)
{ {
if (av_get_packet(&s->pb, pkt, MAX_READ_SIZE) <= 0) if (av_get_packet(s->pb, pkt, MAX_READ_SIZE) <= 0)
return AVERROR(EIO); return AVERROR(EIO);
pkt->stream_index = 0; pkt->stream_index = 0;
return 0; return 0;

View File

@ -110,7 +110,7 @@ typedef struct {
static void ape_tag_read_field(AVFormatContext *s) static void ape_tag_read_field(AVFormatContext *s)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
uint8_t buf[1024]; uint8_t buf[1024];
uint32_t size; uint32_t size;
int i; int i;
@ -143,7 +143,7 @@ static void ape_tag_read_field(AVFormatContext *s)
static void ape_parse_tag(AVFormatContext *s) static void ape_parse_tag(AVFormatContext *s)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int file_size = url_fsize(pb); int file_size = url_fsize(pb);
uint32_t val, fields, tag_bytes; uint32_t val, fields, tag_bytes;
uint8_t buf[8]; uint8_t buf[8];
@ -270,7 +270,7 @@ static void ape_dumpinfo(APEContext * ape_ctx)
static int ape_read_header(AVFormatContext * s, AVFormatParameters * ap) static int ape_read_header(AVFormatContext * s, AVFormatParameters * ap)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
APEContext *ape = s->priv_data; APEContext *ape = s->priv_data;
AVStream *st; AVStream *st;
uint32_t tag; uint32_t tag;
@ -456,12 +456,12 @@ static int ape_read_packet(AVFormatContext * s, AVPacket * pkt)
APEContext *ape = s->priv_data; APEContext *ape = s->priv_data;
uint32_t extra_size = 8; uint32_t extra_size = 8;
if (url_feof(&s->pb)) if (url_feof(s->pb))
return AVERROR_IO; return AVERROR_IO;
if (ape->currentframe > ape->totalframes) if (ape->currentframe > ape->totalframes)
return AVERROR_IO; return AVERROR_IO;
url_fseek (&s->pb, ape->frames[ape->currentframe].pos, SEEK_SET); url_fseek (s->pb, ape->frames[ape->currentframe].pos, SEEK_SET);
/* Calculate how many blocks there are in this frame */ /* Calculate how many blocks there are in this frame */
if (ape->currentframe == (ape->totalframes - 1)) if (ape->currentframe == (ape->totalframes - 1))
@ -474,7 +474,7 @@ static int ape_read_packet(AVFormatContext * s, AVPacket * pkt)
AV_WL32(pkt->data , nblocks); AV_WL32(pkt->data , nblocks);
AV_WL32(pkt->data + 4, ape->frames[ape->currentframe].skip); AV_WL32(pkt->data + 4, ape->frames[ape->currentframe].skip);
ret = get_buffer(&s->pb, pkt->data + extra_size, ape->frames[ape->currentframe].size); ret = get_buffer(s->pb, pkt->data + extra_size, ape->frames[ape->currentframe].size);
pkt->pts = ape->frames[ape->currentframe].pts; pkt->pts = ape->frames[ape->currentframe].pts;
pkt->stream_index = 0; pkt->stream_index = 0;

View File

@ -244,7 +244,7 @@ static void end_header(ByteIOContext *pb, int64_t pos)
static void put_chunk(AVFormatContext *s, int type, int payload_length, int flags) static void put_chunk(AVFormatContext *s, int type, int payload_length, int flags)
{ {
ASFContext *asf = s->priv_data; ASFContext *asf = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int length; int length;
length = payload_length + 8; length = payload_length + 8;
@ -270,7 +270,7 @@ static int64_t unix_to_file_time(int ti)
static int asf_write_header1(AVFormatContext *s, int64_t file_size, int64_t data_chunk_size) static int asf_write_header1(AVFormatContext *s, int64_t file_size, int64_t data_chunk_size)
{ {
ASFContext *asf = s->priv_data; ASFContext *asf = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int header_size, n, extra_size, extra_size2, wav_extra_size, file_time; int header_size, n, extra_size, extra_size2, wav_extra_size, file_time;
int has_title; int has_title;
AVCodecContext *enc; AVCodecContext *enc;
@ -506,7 +506,7 @@ static int asf_write_header(AVFormatContext *s)
return -1; return -1;
} }
put_flush_packet(&s->pb); put_flush_packet(s->pb);
asf->packet_nb_payloads = 0; asf->packet_nb_payloads = 0;
asf->packet_timestamp_start = -1; asf->packet_timestamp_start = -1;
@ -535,7 +535,7 @@ static int put_payload_parsing_info(
) )
{ {
ASFContext *asf = s->priv_data; ASFContext *asf = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int ppi_size, i; int ppi_size, i;
int64_t start= url_ftell(pb); int64_t start= url_ftell(pb);
@ -600,9 +600,9 @@ static void flush_packet(AVFormatContext *s)
assert(packet_hdr_size <= asf->packet_size_left); assert(packet_hdr_size <= asf->packet_size_left);
memset(asf->packet_buf + packet_filled_size, 0, asf->packet_size_left); memset(asf->packet_buf + packet_filled_size, 0, asf->packet_size_left);
put_buffer(&s->pb, asf->packet_buf, asf->packet_size - packet_hdr_size); put_buffer(s->pb, asf->packet_buf, asf->packet_size - packet_hdr_size);
put_flush_packet(&s->pb); put_flush_packet(s->pb);
asf->nb_packets++; asf->nb_packets++;
asf->packet_nb_payloads = 0; asf->packet_nb_payloads = 0;
asf->packet_timestamp_start = -1; asf->packet_timestamp_start = -1;
@ -766,7 +766,7 @@ static int asf_write_packet(AVFormatContext *s, AVPacket *pkt)
// //
static int asf_write_index(AVFormatContext *s, ASFIndex *index, uint16_t max, uint32_t count) static int asf_write_index(AVFormatContext *s, ASFIndex *index, uint16_t max, uint32_t count)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int i; int i;
put_guid(pb, &simple_index_header); put_guid(pb, &simple_index_header);
@ -793,22 +793,22 @@ static int asf_write_trailer(AVFormatContext *s)
flush_packet(s); flush_packet(s);
/* write index */ /* write index */
data_size = url_ftell(&s->pb); data_size = url_ftell(s->pb);
if ((!asf->is_streamed) && (asf->nb_index_count != 0)) { if ((!asf->is_streamed) && (asf->nb_index_count != 0)) {
asf_write_index(s, asf->index_ptr, asf->maximum_packet, asf->nb_index_count); asf_write_index(s, asf->index_ptr, asf->maximum_packet, asf->nb_index_count);
} }
put_flush_packet(&s->pb); put_flush_packet(s->pb);
if (asf->is_streamed || url_is_streamed(&s->pb)) { if (asf->is_streamed || url_is_streamed(s->pb)) {
put_chunk(s, 0x4524, 0, 0); /* end of stream */ put_chunk(s, 0x4524, 0, 0); /* end of stream */
} else { } else {
/* rewrite an updated header */ /* rewrite an updated header */
file_size = url_ftell(&s->pb); file_size = url_ftell(s->pb);
url_fseek(&s->pb, 0, SEEK_SET); url_fseek(s->pb, 0, SEEK_SET);
asf_write_header1(s, file_size, data_size - asf->data_offset); asf_write_header1(s, file_size, data_size - asf->data_offset);
} }
put_flush_packet(&s->pb); put_flush_packet(s->pb);
av_free(asf->index_ptr); av_free(asf->index_ptr);
return 0; return 0;
} }

View File

@ -148,7 +148,7 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
{ {
ASFContext *asf = s->priv_data; ASFContext *asf = s->priv_data;
GUID g; GUID g;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream *st; AVStream *st;
ASFStream *asf_st; ASFStream *asf_st;
int size, i; int size, i;
@ -582,12 +582,12 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
static int asf_get_packet(AVFormatContext *s) static int asf_get_packet(AVFormatContext *s)
{ {
ASFContext *asf = s->priv_data; ASFContext *asf = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
uint32_t packet_length, padsize; uint32_t packet_length, padsize;
int rsize = 8; int rsize = 8;
int c, d, e, off; int c, d, e, off;
off= (url_ftell(&s->pb) - s->data_offset) % asf->packet_size + 3; off= (url_ftell(s->pb) - s->data_offset) % asf->packet_size + 3;
c=d=e=-1; c=d=e=-1;
while(off-- > 0){ while(off-- > 0){
@ -658,7 +658,7 @@ static int asf_get_packet(AVFormatContext *s)
*/ */
static int asf_read_frame_header(AVFormatContext *s){ static int asf_read_frame_header(AVFormatContext *s){
ASFContext *asf = s->priv_data; ASFContext *asf = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int rsize = 1; int rsize = 1;
int num = get_byte(pb); int num = get_byte(pb);
int64_t ts0, ts1; int64_t ts0, ts1;
@ -731,7 +731,7 @@ static int asf_read_packet(AVFormatContext *s, AVPacket *pkt)
{ {
ASFContext *asf = s->priv_data; ASFContext *asf = s->priv_data;
ASFStream *asf_st = 0; ASFStream *asf_st = 0;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
//static int pc = 0; //static int pc = 0;
for (;;) { for (;;) {
if(url_feof(pb)) if(url_feof(pb))
@ -745,7 +745,7 @@ static int asf_read_packet(AVFormatContext *s, AVPacket *pkt)
/* fail safe */ /* fail safe */
url_fskip(pb, ret); url_fskip(pb, ret);
asf->packet_pos= url_ftell(&s->pb); asf->packet_pos= url_ftell(s->pb);
if (asf->data_object_size != (uint64_t)-1 && if (asf->data_object_size != (uint64_t)-1 &&
(asf->packet_pos - asf->data_object_offset >= asf->data_object_size)) (asf->packet_pos - asf->data_object_offset >= asf->data_object_size))
return AVERROR(EIO); /* Do not exceed the size of the data object */ return AVERROR(EIO); /* Do not exceed the size of the data object */
@ -968,7 +968,7 @@ static int64_t asf_read_pts(AVFormatContext *s, int stream_index, int64_t *ppos,
pos= (pos+asf->packet_size-1-s->data_offset)/asf->packet_size*asf->packet_size+ s->data_offset; pos= (pos+asf->packet_size-1-s->data_offset)/asf->packet_size*asf->packet_size+ s->data_offset;
*ppos= pos; *ppos= pos;
url_fseek(&s->pb, pos, SEEK_SET); url_fseek(s->pb, pos, SEEK_SET);
//printf("asf_read_pts\n"); //printf("asf_read_pts\n");
asf_reset_header(s); asf_reset_header(s);
@ -1012,21 +1012,21 @@ static void asf_build_simple_index(AVFormatContext *s, int stream_index)
int i; int i;
int pct,ict; int pct,ict;
current_pos = url_ftell(&s->pb); current_pos = url_ftell(s->pb);
url_fseek(&s->pb, asf->data_object_offset + asf->data_object_size, SEEK_SET); url_fseek(s->pb, asf->data_object_offset + asf->data_object_size, SEEK_SET);
get_guid(&s->pb, &g); get_guid(s->pb, &g);
if (!memcmp(&g, &index_guid, sizeof(GUID))) { if (!memcmp(&g, &index_guid, sizeof(GUID))) {
gsize = get_le64(&s->pb); gsize = get_le64(s->pb);
get_guid(&s->pb, &g); get_guid(s->pb, &g);
itime=get_le64(&s->pb); itime=get_le64(s->pb);
pct=get_le32(&s->pb); pct=get_le32(s->pb);
ict=get_le32(&s->pb); ict=get_le32(s->pb);
av_log(NULL, AV_LOG_DEBUG, "itime:0x%"PRIx64", pct:%d, ict:%d\n",itime,pct,ict); av_log(NULL, AV_LOG_DEBUG, "itime:0x%"PRIx64", pct:%d, ict:%d\n",itime,pct,ict);
for (i=0;i<ict;i++){ for (i=0;i<ict;i++){
int pktnum=get_le32(&s->pb); int pktnum=get_le32(s->pb);
int pktct =get_le16(&s->pb); int pktct =get_le16(s->pb);
av_log(NULL, AV_LOG_DEBUG, "pktnum:%d, pktct:%d\n", pktnum, pktct); av_log(NULL, AV_LOG_DEBUG, "pktnum:%d, pktct:%d\n", pktnum, pktct);
pos=s->data_offset + asf->packet_size*(int64_t)pktnum; pos=s->data_offset + asf->packet_size*(int64_t)pktnum;
@ -1036,7 +1036,7 @@ static void asf_build_simple_index(AVFormatContext *s, int stream_index)
} }
asf->index_read= 1; asf->index_read= 1;
} }
url_fseek(&s->pb, current_pos, SEEK_SET); url_fseek(s->pb, current_pos, SEEK_SET);
} }
static int asf_read_seek(AVFormatContext *s, int stream_index, int64_t pts, int flags) static int asf_read_seek(AVFormatContext *s, int stream_index, int64_t pts, int flags)
@ -1066,10 +1066,10 @@ static int asf_read_seek(AVFormatContext *s, int stream_index, int64_t pts, int
// various attempts to find key frame have failed so far // various attempts to find key frame have failed so far
// asf_reset_header(s); // asf_reset_header(s);
// url_fseek(&s->pb, pos, SEEK_SET); // url_fseek(s->pb, pos, SEEK_SET);
// key_pos = pos; // key_pos = pos;
// for(i=0;i<16;i++){ // for(i=0;i<16;i++){
// pos = url_ftell(&s->pb); // pos = url_ftell(s->pb);
// if (av_read_frame(s, &pkt) < 0){ // if (av_read_frame(s, &pkt) < 0){
// av_log(s, AV_LOG_INFO, "seek failed\n"); // av_log(s, AV_LOG_INFO, "seek failed\n");
// return -1; // return -1;
@ -1087,7 +1087,7 @@ static int asf_read_seek(AVFormatContext *s, int stream_index, int64_t pts, int
/* do the seek */ /* do the seek */
av_log(NULL, AV_LOG_DEBUG, "SEEKTO: %"PRId64"\n", pos); av_log(NULL, AV_LOG_DEBUG, "SEEKTO: %"PRId64"\n", pos);
url_fseek(&s->pb, pos, SEEK_SET); url_fseek(s->pb, pos, SEEK_SET);
} }
asf_reset_header(s); asf_reset_header(s);
return 0; return 0;

View File

@ -59,7 +59,7 @@ static int put_au_header(ByteIOContext *pb, AVCodecContext *enc)
static int au_write_header(AVFormatContext *s) static int au_write_header(AVFormatContext *s)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
s->priv_data = NULL; s->priv_data = NULL;
@ -75,17 +75,17 @@ static int au_write_header(AVFormatContext *s)
static int au_write_packet(AVFormatContext *s, AVPacket *pkt) static int au_write_packet(AVFormatContext *s, AVPacket *pkt)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
put_buffer(pb, pkt->data, pkt->size); put_buffer(pb, pkt->data, pkt->size);
return 0; return 0;
} }
static int au_write_trailer(AVFormatContext *s) static int au_write_trailer(AVFormatContext *s)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
offset_t file_size; offset_t file_size;
if (!url_is_streamed(&s->pb)) { if (!url_is_streamed(s->pb)) {
/* update file size */ /* update file size */
file_size = url_ftell(pb); file_size = url_ftell(pb);
@ -116,7 +116,7 @@ static int au_read_header(AVFormatContext *s,
{ {
int size; int size;
unsigned int tag; unsigned int tag;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
unsigned int id, codec, channels, rate; unsigned int id, codec, channels, rate;
AVStream *st; AVStream *st;
@ -158,9 +158,9 @@ static int au_read_packet(AVFormatContext *s,
{ {
int ret; int ret;
if (url_feof(&s->pb)) if (url_feof(s->pb))
return AVERROR(EIO); return AVERROR(EIO);
ret= av_get_packet(&s->pb, pkt, MAX_SIZE); ret= av_get_packet(s->pb, pkt, MAX_SIZE);
if (ret < 0) if (ret < 0)
return AVERROR(EIO); return AVERROR(EIO);
pkt->stream_index = 0; pkt->stream_index = 0;

View File

@ -21,8 +21,8 @@
#ifndef FFMPEG_AVFORMAT_H #ifndef FFMPEG_AVFORMAT_H
#define FFMPEG_AVFORMAT_H #define FFMPEG_AVFORMAT_H
#define LIBAVFORMAT_VERSION_INT ((51<<16)+(19<<8)+0) #define LIBAVFORMAT_VERSION_INT ((52<<16)+(0<<8)+0)
#define LIBAVFORMAT_VERSION 51.19.0 #define LIBAVFORMAT_VERSION 52.0.0
#define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT #define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT
#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION) #define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION)
@ -369,7 +369,7 @@ typedef struct AVFormatContext {
struct AVInputFormat *iformat; struct AVInputFormat *iformat;
struct AVOutputFormat *oformat; struct AVOutputFormat *oformat;
void *priv_data; void *priv_data;
ByteIOContext pb; ByteIOContext *pb;
unsigned int nb_streams; unsigned int nb_streams;
AVStream *streams[MAX_STREAMS]; AVStream *streams[MAX_STREAMS];
char filename[1024]; /**< input or output filename */ char filename[1024]; /**< input or output filename */

View File

@ -106,7 +106,7 @@ static int get_riff(AVIContext *avi, ByteIOContext *pb)
static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){ static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){
AVIContext *avi = s->priv_data; AVIContext *avi = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int longs_pre_entry= get_le16(pb); int longs_pre_entry= get_le16(pb);
int index_sub_type = get_byte(pb); int index_sub_type = get_byte(pb);
int index_type = get_byte(pb); int index_type = get_byte(pb);
@ -118,7 +118,7 @@ static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){
AVIStream *ast; AVIStream *ast;
int i; int i;
int64_t last_pos= -1; int64_t last_pos= -1;
int64_t filesize= url_fsize(&s->pb); int64_t filesize= url_fsize(s->pb);
#ifdef DEBUG_SEEK #ifdef DEBUG_SEEK
av_log(s, AV_LOG_ERROR, "longs_pre_entry:%d index_type:%d entries_in_use:%d chunk_id:%X base:%16"PRIX64"\n", av_log(s, AV_LOG_ERROR, "longs_pre_entry:%d index_type:%d entries_in_use:%d chunk_id:%X base:%16"PRIX64"\n",
@ -225,7 +225,7 @@ static int avi_read_tag(ByteIOContext *pb, char *buf, int maxlen, unsigned int
static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
{ {
AVIContext *avi = s->priv_data; AVIContext *avi = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
uint32_t tag, tag1, handler; uint32_t tag, tag1, handler;
int codec_type, stream_index, frame_period, bit_rate; int codec_type, stream_index, frame_period, bit_rate;
unsigned int size, nb_frames; unsigned int size, nb_frames;
@ -583,7 +583,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
static int avi_read_packet(AVFormatContext *s, AVPacket *pkt) static int avi_read_packet(AVFormatContext *s, AVPacket *pkt)
{ {
AVIContext *avi = s->priv_data; AVIContext *avi = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int n, d[8], size; int n, d[8], size;
offset_t i, sync; offset_t i, sync;
void* dstr; void* dstr;
@ -628,7 +628,7 @@ static int avi_read_packet(AVFormatContext *s, AVPacket *pkt)
if(i>=0){ if(i>=0){
int64_t pos= best_st->index_entries[i].pos; int64_t pos= best_st->index_entries[i].pos;
pos += best_ast->packet_size - best_ast->remaining; pos += best_ast->packet_size - best_ast->remaining;
url_fseek(&s->pb, pos + 8, SEEK_SET); url_fseek(s->pb, pos + 8, SEEK_SET);
// av_log(NULL, AV_LOG_DEBUG, "pos=%"PRId64"\n", pos); // av_log(NULL, AV_LOG_DEBUG, "pos=%"PRId64"\n", pos);
assert(best_ast->remaining <= best_ast->packet_size); assert(best_ast->remaining <= best_ast->packet_size);
@ -819,7 +819,7 @@ resync:
static int avi_read_idx1(AVFormatContext *s, int size) static int avi_read_idx1(AVFormatContext *s, int size)
{ {
AVIContext *avi = s->priv_data; AVIContext *avi = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int nb_index_entries, i; int nb_index_entries, i;
AVStream *st; AVStream *st;
AVIStream *ast; AVIStream *ast;
@ -890,7 +890,7 @@ static int guess_ni_flag(AVFormatContext *s){
static int avi_load_index(AVFormatContext *s) static int avi_load_index(AVFormatContext *s)
{ {
AVIContext *avi = s->priv_data; AVIContext *avi = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
uint32_t tag, size; uint32_t tag, size;
offset_t pos= url_ftell(pb); offset_t pos= url_ftell(pb);
@ -965,7 +965,7 @@ static int avi_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp
/* DV demux so it can synth correct timestamps */ /* DV demux so it can synth correct timestamps */
dv_offset_reset(avi->dv_demux, timestamp); dv_offset_reset(avi->dv_demux, timestamp);
url_fseek(&s->pb, pos, SEEK_SET); url_fseek(s->pb, pos, SEEK_SET);
avi->stream_index= -1; avi->stream_index= -1;
return 0; return 0;
} }
@ -1005,7 +1005,7 @@ static int avi_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp
} }
/* do the seek */ /* do the seek */
url_fseek(&s->pb, pos, SEEK_SET); url_fseek(s->pb, pos, SEEK_SET);
avi->stream_index= -1; avi->stream_index= -1;
return 0; return 0;
} }

View File

@ -105,7 +105,7 @@ static void avi_write_info_tag(ByteIOContext *pb, const char *tag, const char *s
static int avi_write_counters(AVFormatContext* s, int riff_id) static int avi_write_counters(AVFormatContext* s, int riff_id)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVIContext *avi = s->priv_data; AVIContext *avi = s->priv_data;
int n, au_byterate, au_ssize, au_scale, nb_frames = 0; int n, au_byterate, au_ssize, au_scale, nb_frames = 0;
offset_t file_size; offset_t file_size;
@ -138,7 +138,7 @@ static int avi_write_counters(AVFormatContext* s, int riff_id)
static int avi_write_header(AVFormatContext *s) static int avi_write_header(AVFormatContext *s)
{ {
AVIContext *avi = s->priv_data; AVIContext *avi = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int bitrate, n, i, nb_frames, au_byterate, au_ssize, au_scale; int bitrate, n, i, nb_frames, au_byterate, au_ssize, au_scale;
AVCodecContext *stream, *video_enc; AVCodecContext *stream, *video_enc;
offset_t list1, list2, strh, strf; offset_t list1, list2, strh, strf;
@ -332,7 +332,7 @@ static int avi_write_header(AVFormatContext *s)
static int avi_write_ix(AVFormatContext *s) static int avi_write_ix(AVFormatContext *s)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVIContext *avi = s->priv_data; AVIContext *avi = s->priv_data;
char tag[5]; char tag[5];
char ix_tag[] = "ix00"; char ix_tag[] = "ix00";
@ -389,7 +389,7 @@ static int avi_write_ix(AVFormatContext *s)
static int avi_write_idx1(AVFormatContext *s) static int avi_write_idx1(AVFormatContext *s)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVIContext *avi = s->priv_data; AVIContext *avi = s->priv_data;
offset_t idx_chunk; offset_t idx_chunk;
int i; int i;
@ -435,7 +435,7 @@ static int avi_write_idx1(AVFormatContext *s)
static int avi_write_packet(AVFormatContext *s, AVPacket *pkt) static int avi_write_packet(AVFormatContext *s, AVPacket *pkt)
{ {
AVIContext *avi = s->priv_data; AVIContext *avi = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
unsigned char tag[5]; unsigned char tag[5];
unsigned int flags=0; unsigned int flags=0;
const int stream_index= pkt->stream_index; const int stream_index= pkt->stream_index;
@ -476,7 +476,7 @@ static int avi_write_packet(AVFormatContext *s, AVPacket *pkt)
avi->audio_strm_length[stream_index] += size; avi->audio_strm_length[stream_index] += size;
} }
if (!url_is_streamed(&s->pb)) { if (!url_is_streamed(s->pb)) {
AVIIndex* idx = &avi->indexes[stream_index]; AVIIndex* idx = &avi->indexes[stream_index];
int cl = idx->entry / AVI_INDEX_CLUSTER_SIZE; int cl = idx->entry / AVI_INDEX_CLUSTER_SIZE;
int id = idx->entry % AVI_INDEX_CLUSTER_SIZE; int id = idx->entry % AVI_INDEX_CLUSTER_SIZE;
@ -509,7 +509,7 @@ static int avi_write_packet(AVFormatContext *s, AVPacket *pkt)
static int avi_write_trailer(AVFormatContext *s) static int avi_write_trailer(AVFormatContext *s)
{ {
AVIContext *avi = s->priv_data; AVIContext *avi = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int res = 0; int res = 0;
int i, j, n, nb_frames; int i, j, n, nb_frames;
offset_t file_size; offset_t file_size;

View File

@ -201,7 +201,7 @@ static inline int url_is_streamed(ByteIOContext *s)
/** @note when opened as read/write, the buffers are only used for /** @note when opened as read/write, the buffers are only used for
writing */ writing */
int url_fdopen(ByteIOContext *s, URLContext *h); int url_fdopen(ByteIOContext **s, URLContext *h);
/** @warning must be called before any I/O */ /** @warning must be called before any I/O */
int url_setbufsize(ByteIOContext *s, int buf_size); int url_setbufsize(ByteIOContext *s, int buf_size);
@ -213,7 +213,7 @@ int url_resetbuf(ByteIOContext *s, int flags);
/** @note when opened as read/write, the buffers are only used for /** @note when opened as read/write, the buffers are only used for
writing */ writing */
int url_fopen(ByteIOContext *s, const char *filename, int flags); int url_fopen(ByteIOContext **s, const char *filename, int flags);
int url_fclose(ByteIOContext *s); int url_fclose(ByteIOContext *s);
URLContext *url_fileno(ByteIOContext *s); URLContext *url_fileno(ByteIOContext *s);
@ -227,7 +227,7 @@ URLContext *url_fileno(ByteIOContext *s);
*/ */
int url_fget_max_packet_size(ByteIOContext *s); int url_fget_max_packet_size(ByteIOContext *s);
int url_open_buf(ByteIOContext *s, uint8_t *buf, int buf_size, int flags); int url_open_buf(ByteIOContext **s, uint8_t *buf, int buf_size, int flags);
/** return the written or read size */ /** return the written or read size */
int url_close_buf(ByteIOContext *s); int url_close_buf(ByteIOContext *s);
@ -238,7 +238,7 @@ int url_close_buf(ByteIOContext *s);
* @param s new IO context * @param s new IO context
* @return zero if no error. * @return zero if no error.
*/ */
int url_open_dyn_buf(ByteIOContext *s); int url_open_dyn_buf(ByteIOContext **s);
/** /**
* Open a write only packetized memory stream with a maximum packet * Open a write only packetized memory stream with a maximum packet
@ -249,7 +249,7 @@ int url_open_dyn_buf(ByteIOContext *s);
* @param max_packet_size maximum packet size (must be > 0) * @param max_packet_size maximum packet size (must be > 0)
* @return zero if no error. * @return zero if no error.
*/ */
int url_open_dyn_packet_buf(ByteIOContext *s, int max_packet_size); int url_open_dyn_packet_buf(ByteIOContext **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

View File

@ -111,7 +111,12 @@ void put_flush_packet(ByteIOContext *s)
offset_t url_fseek(ByteIOContext *s, offset_t offset, int whence) offset_t url_fseek(ByteIOContext *s, offset_t offset, int whence)
{ {
offset_t offset1; offset_t offset1;
offset_t pos= s->pos - (s->write_flag ? 0 : (s->buf_end - s->buffer)); offset_t pos;
if(!s)
return AVERROR(EINVAL);
pos = s->pos - (s->write_flag ? 0 : (s->buf_end - s->buffer));
if (whence != SEEK_CUR && whence != SEEK_SET) if (whence != SEEK_CUR && whence != SEEK_SET)
return AVERROR(EINVAL); return AVERROR(EINVAL);
@ -167,6 +172,9 @@ offset_t url_fsize(ByteIOContext *s)
{ {
offset_t size; offset_t size;
if(!s)
return AVERROR(EINVAL);
if (!s->seek) if (!s->seek)
return AVERROR(EPIPE); return AVERROR(EPIPE);
size = s->seek(s->opaque, 0, AVSEEK_SIZE); size = s->seek(s->opaque, 0, AVSEEK_SIZE);
@ -181,11 +189,15 @@ offset_t url_fsize(ByteIOContext *s)
int url_feof(ByteIOContext *s) int url_feof(ByteIOContext *s)
{ {
if(!s)
return 0;
return s->eof_reached; return s->eof_reached;
} }
int url_ferror(ByteIOContext *s) int url_ferror(ByteIOContext *s)
{ {
if(!s)
return 0;
return s->error; return s->error;
} }
@ -508,7 +520,7 @@ static offset_t url_seek_packet(void *opaque, offset_t offset, int whence)
//return 0; //return 0;
} }
int url_fdopen(ByteIOContext *s, URLContext *h) int url_fdopen(ByteIOContext **s, URLContext *h)
{ {
uint8_t *buffer; uint8_t *buffer;
int buffer_size, max_packet_size; int buffer_size, max_packet_size;
@ -524,14 +536,21 @@ int url_fdopen(ByteIOContext *s, URLContext *h)
if (!buffer) if (!buffer)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
if (init_put_byte(s, buffer, buffer_size, *s = av_mallocz(sizeof(ByteIOContext));
if(!*s) {
av_free(buffer);
return AVERROR(ENOMEM);
}
if (init_put_byte(*s, buffer, buffer_size,
(h->flags & URL_WRONLY || h->flags & URL_RDWR), h, (h->flags & URL_WRONLY || h->flags & URL_RDWR), h,
url_read_packet, url_write_packet, url_seek_packet) < 0) { url_read_packet, url_write_packet, url_seek_packet) < 0) {
av_free(buffer); av_free(buffer);
av_freep(s);
return AVERROR(EIO); return AVERROR(EIO);
} }
s->is_streamed = h->is_streamed; (*s)->is_streamed = h->is_streamed;
s->max_packet_size = max_packet_size; (*s)->max_packet_size = max_packet_size;
return 0; return 0;
} }
@ -566,7 +585,7 @@ int url_resetbuf(ByteIOContext *s, int flags)
return 0; return 0;
} }
int url_fopen(ByteIOContext *s, const char *filename, int flags) int url_fopen(ByteIOContext **s, const char *filename, int flags)
{ {
URLContext *h; URLContext *h;
int err; int err;
@ -587,7 +606,7 @@ int url_fclose(ByteIOContext *s)
URLContext *h = s->opaque; URLContext *h = s->opaque;
av_free(s->buffer); av_free(s->buffer);
memset(s, 0, sizeof(ByteIOContext)); av_free(s);
return url_close(h); return url_close(h);
} }
@ -641,11 +660,18 @@ int url_fget_max_packet_size(ByteIOContext *s)
* back to the server even if CONFIG_MUXERS is not set. */ * back to the server even if CONFIG_MUXERS is not set. */
#if defined(CONFIG_MUXERS) || defined(CONFIG_NETWORK) #if defined(CONFIG_MUXERS) || defined(CONFIG_NETWORK)
/* buffer handling */ /* buffer handling */
int url_open_buf(ByteIOContext *s, uint8_t *buf, int buf_size, int flags) int url_open_buf(ByteIOContext **s, uint8_t *buf, int buf_size, int flags)
{ {
return init_put_byte(s, buf, buf_size, int ret;
(flags & URL_WRONLY || flags & URL_RDWR), *s = av_mallocz(sizeof(ByteIOContext));
NULL, NULL, NULL, NULL); if(!*s)
return AVERROR(ENOMEM);
ret = init_put_byte(*s, buf, buf_size,
(flags & URL_WRONLY || flags & URL_RDWR),
NULL, NULL, NULL, NULL);
if(ret != 0)
av_freep(s);
return ret;
} }
int url_close_buf(ByteIOContext *s) int url_close_buf(ByteIOContext *s)
@ -725,7 +751,7 @@ static offset_t dyn_buf_seek(void *opaque, offset_t offset, int whence)
return 0; return 0;
} }
static int url_open_dyn_buf_internal(ByteIOContext *s, int max_packet_size) static int url_open_dyn_buf_internal(ByteIOContext **s, int max_packet_size)
{ {
DynBuffer *d; DynBuffer *d;
int io_buffer_size, ret; int io_buffer_size, ret;
@ -740,27 +766,35 @@ static int url_open_dyn_buf_internal(ByteIOContext *s, int max_packet_size)
d = av_malloc(sizeof(DynBuffer) + io_buffer_size); d = av_malloc(sizeof(DynBuffer) + io_buffer_size);
if (!d) if (!d)
return -1; return -1;
*s = av_mallocz(sizeof(ByteIOContext));
if(!*s) {
av_free(d);
return AVERROR(ENOMEM);
}
d->io_buffer_size = io_buffer_size; d->io_buffer_size = io_buffer_size;
d->buffer = NULL; d->buffer = NULL;
d->pos = 0; d->pos = 0;
d->size = 0; d->size = 0;
d->allocated_size = 0; d->allocated_size = 0;
ret = init_put_byte(s, d->io_buffer, io_buffer_size, ret = init_put_byte(*s, d->io_buffer, io_buffer_size,
1, d, NULL, 1, d, NULL,
max_packet_size ? dyn_packet_buf_write : dyn_buf_write, max_packet_size ? dyn_packet_buf_write : dyn_buf_write,
max_packet_size ? NULL : dyn_buf_seek); max_packet_size ? NULL : dyn_buf_seek);
if (ret == 0) { if (ret == 0) {
s->max_packet_size = max_packet_size; (*s)->max_packet_size = max_packet_size;
} else {
av_free(d);
av_freep(s);
} }
return ret; return ret;
} }
int url_open_dyn_buf(ByteIOContext *s) int url_open_dyn_buf(ByteIOContext **s)
{ {
return url_open_dyn_buf_internal(s, 0); return url_open_dyn_buf_internal(s, 0);
} }
int url_open_dyn_packet_buf(ByteIOContext *s, int max_packet_size) int url_open_dyn_packet_buf(ByteIOContext **s, int max_packet_size)
{ {
if (max_packet_size <= 0) if (max_packet_size <= 0)
return -1; return -1;
@ -777,6 +811,7 @@ int url_close_dyn_buf(ByteIOContext *s, uint8_t **pbuffer)
*pbuffer = d->buffer; *pbuffer = d->buffer;
size = d->size; size = d->size;
av_free(d); av_free(d);
av_free(s);
return size; return size;
} }
#endif /* CONFIG_MUXERS || CONFIG_NETWORK */ #endif /* CONFIG_MUXERS || CONFIG_NETWORK */

View File

@ -60,12 +60,12 @@ static int avs_read_header(AVFormatContext * s, AVFormatParameters * ap)
s->ctx_flags |= AVFMTCTX_NOHEADER; s->ctx_flags |= AVFMTCTX_NOHEADER;
url_fskip(&s->pb, 4); url_fskip(s->pb, 4);
avs->width = get_le16(&s->pb); avs->width = get_le16(s->pb);
avs->height = get_le16(&s->pb); avs->height = get_le16(s->pb);
avs->bits_per_sample = get_le16(&s->pb); avs->bits_per_sample = get_le16(s->pb);
avs->fps = get_le16(&s->pb); avs->fps = get_le16(s->pb);
avs->nb_frames = get_le32(&s->pb); avs->nb_frames = get_le32(s->pb);
avs->remaining_frame_size = 0; avs->remaining_frame_size = 0;
avs->remaining_audio_size = 0; avs->remaining_audio_size = 0;
@ -103,7 +103,7 @@ avs_read_video_packet(AVFormatContext * s, AVPacket * pkt,
pkt->data[palette_size + 1] = type; pkt->data[palette_size + 1] = type;
pkt->data[palette_size + 2] = size & 0xFF; pkt->data[palette_size + 2] = size & 0xFF;
pkt->data[palette_size + 3] = (size >> 8) & 0xFF; pkt->data[palette_size + 3] = (size >> 8) & 0xFF;
ret = get_buffer(&s->pb, pkt->data + palette_size + 4, size - 4) + 4; ret = get_buffer(s->pb, pkt->data + palette_size + 4, size - 4) + 4;
if (ret < size) { if (ret < size) {
av_free_packet(pkt); av_free_packet(pkt);
return AVERROR(EIO); return AVERROR(EIO);
@ -122,9 +122,9 @@ static int avs_read_audio_packet(AVFormatContext * s, AVPacket * pkt)
avs_format_t *avs = s->priv_data; avs_format_t *avs = s->priv_data;
int ret, size; int ret, size;
size = url_ftell(&s->pb); size = url_ftell(s->pb);
ret = voc_get_packet(s, pkt, avs->st_audio, avs->remaining_audio_size); ret = voc_get_packet(s, pkt, avs->st_audio, avs->remaining_audio_size);
size = url_ftell(&s->pb) - size; size = url_ftell(s->pb) - size;
avs->remaining_audio_size -= size; avs->remaining_audio_size -= size;
if (ret == AVERROR(EIO)) if (ret == AVERROR(EIO))
@ -153,20 +153,20 @@ static int avs_read_packet(AVFormatContext * s, AVPacket * pkt)
while (1) { while (1) {
if (avs->remaining_frame_size <= 0) { if (avs->remaining_frame_size <= 0) {
if (!get_le16(&s->pb)) /* found EOF */ if (!get_le16(s->pb)) /* found EOF */
return AVERROR(EIO); return AVERROR(EIO);
avs->remaining_frame_size = get_le16(&s->pb) - 4; avs->remaining_frame_size = get_le16(s->pb) - 4;
} }
while (avs->remaining_frame_size > 0) { while (avs->remaining_frame_size > 0) {
sub_type = get_byte(&s->pb); sub_type = get_byte(s->pb);
type = get_byte(&s->pb); type = get_byte(s->pb);
size = get_le16(&s->pb); size = get_le16(s->pb);
avs->remaining_frame_size -= size; avs->remaining_frame_size -= size;
switch (type) { switch (type) {
case AVS_PALETTE: case AVS_PALETTE:
ret = get_buffer(&s->pb, palette, size - 4); ret = get_buffer(s->pb, palette, size - 4);
if (ret < size - 4) if (ret < size - 4)
return AVERROR(EIO); return AVERROR(EIO);
palette_size = size; palette_size = size;
@ -203,7 +203,7 @@ static int avs_read_packet(AVFormatContext * s, AVPacket * pkt)
break; break;
default: default:
url_fskip(&s->pb, size - 4); url_fskip(s->pb, size - 4);
} }
} }
} }

View File

@ -59,7 +59,7 @@ static int vid_read_header(AVFormatContext *s,
AVFormatParameters *ap) AVFormatParameters *ap)
{ {
BVID_DemuxContext *vid = s->priv_data; BVID_DemuxContext *vid = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream *stream; AVStream *stream;
/* load main header. Contents: /* load main header. Contents:
@ -173,7 +173,7 @@ static int vid_read_packet(AVFormatContext *s,
AVPacket *pkt) AVPacket *pkt)
{ {
BVID_DemuxContext *vid = s->priv_data; BVID_DemuxContext *vid = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
unsigned char block_type; unsigned char block_type;
int audio_length; int audio_length;
int ret_value; int ret_value;

View File

@ -56,7 +56,7 @@ static int read_header(AVFormatContext *s,
AVFormatParameters *ap) AVFormatParameters *ap)
{ {
AVStream *video; AVStream *video;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
C93DemuxContext *c93 = s->priv_data; C93DemuxContext *c93 = s->priv_data;
int i; int i;
int framecount = 0; int framecount = 0;
@ -101,7 +101,7 @@ static int read_header(AVFormatContext *s,
static int read_packet(AVFormatContext *s, AVPacket *pkt) static int read_packet(AVFormatContext *s, AVPacket *pkt)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
C93DemuxContext *c93 = s->priv_data; C93DemuxContext *c93 = s->priv_data;
C93BlockRecord *br = &c93->block_records[c93->current_block]; C93BlockRecord *br = &c93->block_records[c93->current_block];
int datasize; int datasize;

View File

@ -48,8 +48,8 @@ static int crc_write_trailer(struct AVFormatContext *s)
char buf[64]; char buf[64];
snprintf(buf, sizeof(buf), "CRC=0x%08x\n", crc->crcval); snprintf(buf, sizeof(buf), "CRC=0x%08x\n", crc->crcval);
put_buffer(&s->pb, buf, strlen(buf)); put_buffer(s->pb, buf, strlen(buf));
put_flush_packet(&s->pb); put_flush_packet(s->pb);
return 0; return 0;
} }

View File

@ -34,7 +34,7 @@ static int daud_header(AVFormatContext *s, AVFormatParameters *ap) {
} }
static int daud_packet(AVFormatContext *s, AVPacket *pkt) { static int daud_packet(AVFormatContext *s, AVPacket *pkt) {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int ret, size; int ret, size;
if (url_feof(pb)) if (url_feof(pb))
return AVERROR(EIO); return AVERROR(EIO);

View File

@ -94,7 +94,7 @@ static int cin_read_header(AVFormatContext *s, AVFormatParameters *ap)
int rc; int rc;
CinDemuxContext *cin = s->priv_data; CinDemuxContext *cin = s->priv_data;
CinFileHeader *hdr = &cin->file_header; CinFileHeader *hdr = &cin->file_header;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream *st; AVStream *st;
rc = cin_read_file_header(cin, pb); rc = cin_read_file_header(cin, pb);
@ -158,7 +158,7 @@ static int cin_read_frame_header(CinDemuxContext *cin, ByteIOContext *pb) {
static int cin_read_packet(AVFormatContext *s, AVPacket *pkt) static int cin_read_packet(AVFormatContext *s, AVPacket *pkt)
{ {
CinDemuxContext *cin = s->priv_data; CinDemuxContext *cin = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
CinFrameHeader *hdr = &cin->frame_header; CinFrameHeader *hdr = &cin->frame_header;
int rc, palette_type, pkt_size; int rc, palette_type, pkt_size;

View File

@ -347,7 +347,7 @@ static int64_t dv_frame_offset(AVFormatContext *s, DVDemuxContext *c,
// FIXME: sys may be wrong if last dv_read_packet() failed (buffer is junk) // FIXME: sys may be wrong if last dv_read_packet() failed (buffer is junk)
const DVprofile* sys = dv_codec_profile(c->vst->codec); const DVprofile* sys = dv_codec_profile(c->vst->codec);
int64_t offset; int64_t offset;
int64_t size = url_fsize(&s->pb); int64_t size = url_fsize(s->pb);
int64_t max_offset = ((size-1) / sys->frame_size) * sys->frame_size; int64_t max_offset = ((size-1) / sys->frame_size) * sys->frame_size;
offset = sys->frame_size * timestamp; offset = sys->frame_size * timestamp;
@ -386,8 +386,8 @@ static int dv_read_header(AVFormatContext *s,
if (!c->dv_demux) if (!c->dv_demux)
return -1; return -1;
if (get_buffer(&s->pb, c->buf, DV_PROFILE_BYTES) <= 0 || if (get_buffer(s->pb, c->buf, DV_PROFILE_BYTES) <= 0 ||
url_fseek(&s->pb, -DV_PROFILE_BYTES, SEEK_CUR) < 0) url_fseek(s->pb, -DV_PROFILE_BYTES, SEEK_CUR) < 0)
return AVERROR(EIO); return AVERROR(EIO);
c->dv_demux->sys = dv_frame_profile(c->buf); c->dv_demux->sys = dv_frame_profile(c->buf);
@ -408,7 +408,7 @@ static int dv_read_packet(AVFormatContext *s, AVPacket *pkt)
if (size < 0) { if (size < 0) {
size = c->dv_demux->sys->frame_size; size = c->dv_demux->sys->frame_size;
if (get_buffer(&s->pb, c->buf, size) <= 0) if (get_buffer(s->pb, c->buf, size) <= 0)
return AVERROR(EIO); return AVERROR(EIO);
size = dv_produce_packet(c->dv_demux, pkt, c->buf, size); size = dv_produce_packet(c->dv_demux, pkt, c->buf, size);
@ -426,7 +426,7 @@ static int dv_read_seek(AVFormatContext *s, int stream_index,
dv_offset_reset(c, offset / c->sys->frame_size); dv_offset_reset(c, offset / c->sys->frame_size);
offset = url_fseek(&s->pb, offset, SEEK_SET); offset = url_fseek(s->pb, offset, SEEK_SET);
return (offset < 0)?offset:0; return (offset < 0)?offset:0;
} }

View File

@ -380,8 +380,8 @@ static int dv_write_packet(struct AVFormatContext *s, AVPacket *pkt)
fsize = dv_assemble_frame(s->priv_data, s->streams[pkt->stream_index], fsize = dv_assemble_frame(s->priv_data, s->streams[pkt->stream_index],
pkt->data, pkt->size, &frame); pkt->data, pkt->size, &frame);
if (fsize > 0) { if (fsize > 0) {
put_buffer(&s->pb, frame, fsize); put_buffer(s->pb, frame, fsize);
put_flush_packet(&s->pb); put_flush_packet(s->pb);
} }
return 0; return 0;
} }

View File

@ -45,7 +45,7 @@ static int dxa_probe(AVProbeData *p)
static int dxa_read_header(AVFormatContext *s, AVFormatParameters *ap) static int dxa_read_header(AVFormatContext *s, AVFormatParameters *ap)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
DXAContext *c = s->priv_data; DXAContext *c = s->priv_data;
AVStream *st, *ast; AVStream *st, *ast;
uint32_t tag; uint32_t tag;
@ -144,19 +144,19 @@ static int dxa_read_packet(AVFormatContext *s, AVPacket *pkt)
if(!c->readvid && c->has_sound && c->bytes_left){ if(!c->readvid && c->has_sound && c->bytes_left){
c->readvid = 1; c->readvid = 1;
url_fseek(&s->pb, c->wavpos, SEEK_SET); url_fseek(s->pb, c->wavpos, SEEK_SET);
size = FFMIN(c->bytes_left, c->bpc); size = FFMIN(c->bytes_left, c->bpc);
ret = av_get_packet(&s->pb, pkt, size); ret = av_get_packet(s->pb, pkt, size);
pkt->stream_index = 1; pkt->stream_index = 1;
if(ret != size) if(ret != size)
return AVERROR(EIO); return AVERROR(EIO);
c->bytes_left -= size; c->bytes_left -= size;
c->wavpos = url_ftell(&s->pb); c->wavpos = url_ftell(s->pb);
return 0; return 0;
} }
url_fseek(&s->pb, c->vidpos, SEEK_SET); url_fseek(s->pb, c->vidpos, SEEK_SET);
while(!url_feof(&s->pb) && c->frames){ while(!url_feof(s->pb) && c->frames){
get_buffer(&s->pb, buf, 4); get_buffer(s->pb, buf, 4);
switch(AV_RL32(buf)){ switch(AV_RL32(buf)){
case MKTAG('N', 'U', 'L', 'L'): case MKTAG('N', 'U', 'L', 'L'):
if(av_new_packet(pkt, 4 + pal_size) < 0) if(av_new_packet(pkt, 4 + pal_size) < 0)
@ -165,16 +165,16 @@ static int dxa_read_packet(AVFormatContext *s, AVPacket *pkt)
if(pal_size) memcpy(pkt->data, pal, pal_size); if(pal_size) memcpy(pkt->data, pal, pal_size);
memcpy(pkt->data + pal_size, buf, 4); memcpy(pkt->data + pal_size, buf, 4);
c->frames--; c->frames--;
c->vidpos = url_ftell(&s->pb); c->vidpos = url_ftell(s->pb);
c->readvid = 0; c->readvid = 0;
return 0; return 0;
case MKTAG('C', 'M', 'A', 'P'): case MKTAG('C', 'M', 'A', 'P'):
pal_size = 768+4; pal_size = 768+4;
memcpy(pal, buf, 4); memcpy(pal, buf, 4);
get_buffer(&s->pb, pal + 4, 768); get_buffer(s->pb, pal + 4, 768);
break; break;
case MKTAG('F', 'R', 'A', 'M'): case MKTAG('F', 'R', 'A', 'M'):
get_buffer(&s->pb, buf + 4, DXA_EXTRA_SIZE - 4); get_buffer(s->pb, buf + 4, DXA_EXTRA_SIZE - 4);
size = AV_RB32(buf + 5); size = AV_RB32(buf + 5);
if(size > 0xFFFFFF){ if(size > 0xFFFFFF){
av_log(s, AV_LOG_ERROR, "Frame size is too big: %d\n", size); av_log(s, AV_LOG_ERROR, "Frame size is too big: %d\n", size);
@ -183,7 +183,7 @@ static int dxa_read_packet(AVFormatContext *s, AVPacket *pkt)
if(av_new_packet(pkt, size + DXA_EXTRA_SIZE + pal_size) < 0) if(av_new_packet(pkt, size + DXA_EXTRA_SIZE + pal_size) < 0)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
memcpy(pkt->data + pal_size, buf, DXA_EXTRA_SIZE); memcpy(pkt->data + pal_size, buf, DXA_EXTRA_SIZE);
ret = get_buffer(&s->pb, pkt->data + DXA_EXTRA_SIZE + pal_size, size); ret = get_buffer(s->pb, pkt->data + DXA_EXTRA_SIZE + pal_size, size);
if(ret != size){ if(ret != size){
av_free_packet(pkt); av_free_packet(pkt);
return AVERROR(EIO); return AVERROR(EIO);
@ -191,7 +191,7 @@ static int dxa_read_packet(AVFormatContext *s, AVPacket *pkt)
if(pal_size) memcpy(pkt->data, pal, pal_size); if(pal_size) memcpy(pkt->data, pal, pal_size);
pkt->stream_index = 0; pkt->stream_index = 0;
c->frames--; c->frames--;
c->vidpos = url_ftell(&s->pb); c->vidpos = url_ftell(s->pb);
c->readvid = 0; c->readvid = 0;
return 0; return 0;
default: default:

View File

@ -47,7 +47,7 @@ static int cdata_probe(AVProbeData *p)
static int cdata_read_header(AVFormatContext *s, AVFormatParameters *ap) static int cdata_read_header(AVFormatContext *s, AVFormatParameters *ap)
{ {
CdataDemuxContext *cdata = s->priv_data; CdataDemuxContext *cdata = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
unsigned int sample_rate, header; unsigned int sample_rate, header;
AVStream *st; AVStream *st;
@ -83,7 +83,7 @@ static int cdata_read_packet(AVFormatContext *s, AVPacket *pkt)
CdataDemuxContext *cdata = s->priv_data; CdataDemuxContext *cdata = s->priv_data;
int packet_size = 76*cdata->channels; int packet_size = 76*cdata->channels;
if (av_get_packet(&s->pb, pkt, packet_size) != packet_size) if (av_get_packet(s->pb, pkt, packet_size) != packet_size)
return AVERROR(EIO); return AVERROR(EIO);
pkt->pts = cdata->audio_pts++; pkt->pts = cdata->audio_pts++;
return 1; return 1;

View File

@ -90,7 +90,7 @@ static int process_audio_header_elements(AVFormatContext *s)
{ {
int inHeader = 1; int inHeader = 1;
EaDemuxContext *ea = s->priv_data; EaDemuxContext *ea = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int compression_type = -1, revision = -1; int compression_type = -1, revision = -1;
ea->bytes = 2; ea->bytes = 2;
@ -188,7 +188,7 @@ static int process_audio_header_elements(AVFormatContext *s)
static int process_audio_header_eacs(AVFormatContext *s) static int process_audio_header_eacs(AVFormatContext *s)
{ {
EaDemuxContext *ea = s->priv_data; EaDemuxContext *ea = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int compression_type; int compression_type;
ea->sample_rate = ea->big_endian ? get_be32(pb) : get_le32(pb); ea->sample_rate = ea->big_endian ? get_be32(pb) : get_le32(pb);
@ -220,7 +220,7 @@ static int process_audio_header_eacs(AVFormatContext *s)
static int process_audio_header_sead(AVFormatContext *s) static int process_audio_header_sead(AVFormatContext *s)
{ {
EaDemuxContext *ea = s->priv_data; EaDemuxContext *ea = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
ea->sample_rate = get_le32(pb); ea->sample_rate = get_le32(pb);
ea->bytes = get_le32(pb); /* 1=8-bit, 2=16-bit */ ea->bytes = get_le32(pb); /* 1=8-bit, 2=16-bit */
@ -233,7 +233,7 @@ static int process_audio_header_sead(AVFormatContext *s)
static int process_video_header_vp6(AVFormatContext *s) static int process_video_header_vp6(AVFormatContext *s)
{ {
EaDemuxContext *ea = s->priv_data; EaDemuxContext *ea = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
url_fskip(pb, 16); url_fskip(pb, 16);
ea->time_base.den = get_le32(pb); ea->time_base.den = get_le32(pb);
@ -250,7 +250,7 @@ static int process_video_header_vp6(AVFormatContext *s)
static int process_ea_header(AVFormatContext *s) { static int process_ea_header(AVFormatContext *s) {
uint32_t blockid, size = 0; uint32_t blockid, size = 0;
EaDemuxContext *ea = s->priv_data; EaDemuxContext *ea = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int i; int i;
for (i=0; i<5 && (!ea->audio_codec || !ea->video_codec); i++) { for (i=0; i<5 && (!ea->audio_codec || !ea->video_codec); i++) {
@ -370,7 +370,7 @@ static int ea_read_packet(AVFormatContext *s,
AVPacket *pkt) AVPacket *pkt)
{ {
EaDemuxContext *ea = s->priv_data; EaDemuxContext *ea = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int ret = 0; int ret = 0;
int packet_read = 0; int packet_read = 0;
unsigned int chunk_type, chunk_size; unsigned int chunk_type, chunk_size;

View File

@ -64,7 +64,7 @@ static void flush_packet(AVFormatContext *s)
{ {
FFMContext *ffm = s->priv_data; FFMContext *ffm = s->priv_data;
int fill_size, h; int fill_size, h;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
fill_size = ffm->packet_end - ffm->packet_ptr; fill_size = ffm->packet_end - ffm->packet_ptr;
memset(ffm->packet_ptr, 0, fill_size); memset(ffm->packet_ptr, 0, fill_size);
@ -128,7 +128,7 @@ static int ffm_write_header(AVFormatContext *s)
FFMContext *ffm = s->priv_data; FFMContext *ffm = s->priv_data;
AVStream *st; AVStream *st;
FFMStream *fst; FFMStream *fst;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVCodecContext *codec; AVCodecContext *codec;
int bit_rate, i; int bit_rate, i;
@ -278,7 +278,7 @@ static int ffm_write_packet(AVFormatContext *s, AVPacket *pkt)
static int ffm_write_trailer(AVFormatContext *s) static int ffm_write_trailer(AVFormatContext *s)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
FFMContext *ffm = s->priv_data; FFMContext *ffm = s->priv_data;
/* flush packets */ /* flush packets */
@ -314,7 +314,7 @@ static int ffm_is_avail_data(AVFormatContext *s, int size)
if (size <= len) if (size <= len)
return 1; return 1;
} }
pos = url_ftell(&s->pb); pos = url_ftell(s->pb);
if (pos == ffm->write_index) { if (pos == ffm->write_index) {
/* exactly at the end of stream */ /* exactly at the end of stream */
return 0; return 0;
@ -335,7 +335,7 @@ static int ffm_read_data(AVFormatContext *s,
uint8_t *buf, int size, int first) uint8_t *buf, int size, int first)
{ {
FFMContext *ffm = s->priv_data; FFMContext *ffm = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int len, fill_size, size1, frame_offset; int len, fill_size, size1, frame_offset;
size1 = size; size1 = size;
@ -393,7 +393,7 @@ static int ffm_read_data(AVFormatContext *s,
static void adjust_write_index(AVFormatContext *s) static void adjust_write_index(AVFormatContext *s)
{ {
FFMContext *ffm = s->priv_data; FFMContext *ffm = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int64_t pts; int64_t pts;
//offset_t orig_write_index = ffm->write_index; //offset_t orig_write_index = ffm->write_index;
offset_t pos_min, pos_max; offset_t pos_min, pos_max;
@ -452,7 +452,7 @@ static int ffm_read_header(AVFormatContext *s, AVFormatParameters *ap)
FFMContext *ffm = s->priv_data; FFMContext *ffm = s->priv_data;
AVStream *st; AVStream *st;
FFMStream *fst; FFMStream *fst;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVCodecContext *codec; AVCodecContext *codec;
int i, nb_streams; int i, nb_streams;
uint32_t tag; uint32_t tag;
@ -585,7 +585,7 @@ static int ffm_read_packet(AVFormatContext *s, AVPacket *pkt)
} }
#if 0 #if 0
printf("pos=%08"PRIx64" spos=%"PRIx64", write_index=%"PRIx64" size=%"PRIx64"\n", printf("pos=%08"PRIx64" spos=%"PRIx64", write_index=%"PRIx64" size=%"PRIx64"\n",
url_ftell(&s->pb), s->pb.pos, ffm->write_index, ffm->file_size); url_ftell(s->pb), s->pb.pos, ffm->write_index, ffm->file_size);
#endif #endif
if (ffm_read_data(s, ffm->header, FRAME_HEADER_SIZE, 1) != if (ffm_read_data(s, ffm->header, FRAME_HEADER_SIZE, 1) !=
FRAME_HEADER_SIZE) FRAME_HEADER_SIZE)
@ -610,7 +610,7 @@ static int ffm_read_packet(AVFormatContext *s, AVPacket *pkt)
av_new_packet(pkt, size); av_new_packet(pkt, size);
pkt->stream_index = ffm->header[0]; pkt->stream_index = ffm->header[0];
pkt->pos = url_ftell(&s->pb); pkt->pos = url_ftell(s->pb);
if (ffm->header[1] & FLAG_KEY_FRAME) if (ffm->header[1] & FLAG_KEY_FRAME)
pkt->flags |= PKT_FLAG_KEY; pkt->flags |= PKT_FLAG_KEY;
@ -638,7 +638,7 @@ static int ffm_read_packet(AVFormatContext *s, AVPacket *pkt)
static void ffm_seek1(AVFormatContext *s, offset_t pos1) static void ffm_seek1(AVFormatContext *s, offset_t pos1)
{ {
FFMContext *ffm = s->priv_data; FFMContext *ffm = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
offset_t pos; offset_t pos;
pos = pos1 + ffm->write_index; pos = pos1 + ffm->write_index;
@ -652,7 +652,7 @@ static void ffm_seek1(AVFormatContext *s, offset_t pos1)
static int64_t get_pts(AVFormatContext *s, offset_t pos) static int64_t get_pts(AVFormatContext *s, offset_t pos)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int64_t pts; int64_t pts;
ffm_seek1(s, pos); ffm_seek1(s, pos);

View File

@ -67,7 +67,7 @@ static int flic_read_header(AVFormatContext *s,
AVFormatParameters *ap) AVFormatParameters *ap)
{ {
FlicDemuxContext *flic = s->priv_data; FlicDemuxContext *flic = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
unsigned char header[FLIC_HEADER_SIZE]; unsigned char header[FLIC_HEADER_SIZE];
AVStream *st; AVStream *st;
int speed; int speed;
@ -142,7 +142,7 @@ static int flic_read_packet(AVFormatContext *s,
AVPacket *pkt) AVPacket *pkt)
{ {
FlicDemuxContext *flic = s->priv_data; FlicDemuxContext *flic = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int packet_read = 0; int packet_read = 0;
unsigned int size; unsigned int size;
int magic; int magic;

View File

@ -71,7 +71,7 @@ static int flv_set_video_codec(AVFormatContext *s, AVStream *vstream, int flv_co
vcodec->extradata_size = 1; vcodec->extradata_size = 1;
vcodec->extradata = av_malloc(1); vcodec->extradata = av_malloc(1);
} }
vcodec->extradata[0] = get_byte(&s->pb); vcodec->extradata[0] = get_byte(s->pb);
return 1; // 1 byte body size adjustment for flv_read_packet() return 1; // 1 byte body size adjustment for flv_read_packet()
default: default:
av_log(s, AV_LOG_INFO, "Unsupported video codec (%x)\n", flv_codecid); av_log(s, AV_LOG_INFO, "Unsupported video codec (%x)\n", flv_codecid);
@ -103,7 +103,7 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream, AVStream *vst
double num_val; double num_val;
num_val = 0; num_val = 0;
ioc = &s->pb; ioc = s->pb;
amf_type = get_byte(ioc); amf_type = get_byte(ioc);
@ -203,7 +203,7 @@ static int flv_read_metabody(AVFormatContext *s, unsigned int next_pos) {
astream = NULL; astream = NULL;
vstream = NULL; vstream = NULL;
keylen = 0; keylen = 0;
ioc = &s->pb; ioc = s->pb;
//first object needs to be "onMetaData" string //first object needs to be "onMetaData" string
type = get_byte(ioc); type = get_byte(ioc);
@ -238,8 +238,8 @@ static int flv_read_header(AVFormatContext *s,
{ {
int offset, flags; int offset, flags;
url_fskip(&s->pb, 4); url_fskip(s->pb, 4);
flags = get_byte(&s->pb); flags = get_byte(s->pb);
/* old flvtool cleared this field */ /* old flvtool cleared this field */
/* FIXME: better fix needed */ /* FIXME: better fix needed */
if (!flags) { if (!flags) {
@ -256,8 +256,8 @@ static int flv_read_header(AVFormatContext *s,
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
} }
offset = get_be32(&s->pb); offset = get_be32(s->pb);
url_fseek(&s->pb, offset, SEEK_SET); url_fseek(s->pb, offset, SEEK_SET);
s->start_time = 0; s->start_time = 0;
@ -270,35 +270,35 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
AVStream *st = NULL; AVStream *st = NULL;
for(;;){ for(;;){
pos = url_ftell(&s->pb); pos = url_ftell(s->pb);
url_fskip(&s->pb, 4); /* size of previous packet */ url_fskip(s->pb, 4); /* size of previous packet */
type = get_byte(&s->pb); type = get_byte(s->pb);
size = get_be24(&s->pb); size = get_be24(s->pb);
pts = get_be24(&s->pb); pts = get_be24(s->pb);
pts |= get_byte(&s->pb) << 24; pts |= get_byte(s->pb) << 24;
// av_log(s, AV_LOG_DEBUG, "type:%d, size:%d, pts:%d\n", type, size, pts); // av_log(s, AV_LOG_DEBUG, "type:%d, size:%d, pts:%d\n", type, size, pts);
if (url_feof(&s->pb)) if (url_feof(s->pb))
return AVERROR(EIO); return AVERROR(EIO);
url_fskip(&s->pb, 3); /* stream id, always 0 */ url_fskip(s->pb, 3); /* stream id, always 0 */
flags = 0; flags = 0;
if(size == 0) if(size == 0)
continue; continue;
next= size + url_ftell(&s->pb); next= size + url_ftell(s->pb);
if (type == FLV_TAG_TYPE_AUDIO) { if (type == FLV_TAG_TYPE_AUDIO) {
is_audio=1; is_audio=1;
flags = get_byte(&s->pb); flags = get_byte(s->pb);
} else if (type == FLV_TAG_TYPE_VIDEO) { } else if (type == FLV_TAG_TYPE_VIDEO) {
is_audio=0; is_audio=0;
flags = get_byte(&s->pb); flags = get_byte(s->pb);
} else { } else {
if (type == FLV_TAG_TYPE_META && size > 13+1+4) if (type == FLV_TAG_TYPE_META && size > 13+1+4)
flv_read_metabody(s, next); flv_read_metabody(s, next);
else /* skip packet */ else /* skip packet */
av_log(s, AV_LOG_ERROR, "skipping flv packet: type %d, size %d, flags %d\n", type, size, flags); av_log(s, AV_LOG_ERROR, "skipping flv packet: type %d, size %d, flags %d\n", type, size, flags);
url_fseek(&s->pb, next, SEEK_SET); url_fseek(s->pb, next, SEEK_SET);
continue; continue;
} }
@ -317,7 +317,7 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
||(st->discard >= AVDISCARD_BIDIR && ((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_DISP_INTER && !is_audio)) ||(st->discard >= AVDISCARD_BIDIR && ((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_DISP_INTER && !is_audio))
|| st->discard >= AVDISCARD_ALL || st->discard >= AVDISCARD_ALL
){ ){
url_fseek(&s->pb, next, SEEK_SET); url_fseek(s->pb, next, SEEK_SET);
continue; continue;
} }
if ((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_KEY) if ((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_KEY)
@ -326,17 +326,17 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
} }
// if not streamed and no duration from metadata then seek to end to find the duration from the timestamps // if not streamed and no duration from metadata then seek to end to find the duration from the timestamps
if(!url_is_streamed(&s->pb) && s->duration==AV_NOPTS_VALUE){ if(!url_is_streamed(s->pb) && s->duration==AV_NOPTS_VALUE){
int size; int size;
const int pos= url_ftell(&s->pb); const int pos= url_ftell(s->pb);
const int fsize= url_fsize(&s->pb); const int fsize= url_fsize(s->pb);
url_fseek(&s->pb, fsize-4, SEEK_SET); url_fseek(s->pb, fsize-4, SEEK_SET);
size= get_be32(&s->pb); size= get_be32(s->pb);
url_fseek(&s->pb, fsize-3-size, SEEK_SET); url_fseek(s->pb, fsize-3-size, SEEK_SET);
if(size == get_be24(&s->pb) + 11){ if(size == get_be24(s->pb) + 11){
s->duration= get_be24(&s->pb) * (int64_t)AV_TIME_BASE / 1000; s->duration= get_be24(s->pb) * (int64_t)AV_TIME_BASE / 1000;
} }
url_fseek(&s->pb, pos, SEEK_SET); url_fseek(s->pb, pos, SEEK_SET);
} }
if(is_audio){ if(is_audio){
@ -353,7 +353,7 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
size -= flv_set_video_codec(s, st, flags & FLV_VIDEO_CODECID_MASK); size -= flv_set_video_codec(s, st, flags & FLV_VIDEO_CODECID_MASK);
} }
ret= av_get_packet(&s->pb, pkt, size - 1); ret= av_get_packet(s->pb, pkt, size - 1);
if (ret <= 0) { if (ret <= 0) {
return AVERROR(EIO); return AVERROR(EIO);
} }
@ -380,7 +380,7 @@ static int flv_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp
int index = av_index_search_timestamp(st, timestamp, flags); int index = av_index_search_timestamp(st, timestamp, flags);
if (index < 0) if (index < 0)
return -1; return -1;
url_fseek(&s->pb, st->index_entries[index].pos, SEEK_SET); url_fseek(s->pb, st->index_entries[index].pos, SEEK_SET);
return 0; return 0;
} }

View File

@ -126,7 +126,7 @@ static void put_amf_bool(ByteIOContext *pb, int b) {
static int flv_write_header(AVFormatContext *s) static int flv_write_header(AVFormatContext *s)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
FLVContext *flv = s->priv_data; FLVContext *flv = s->priv_data;
int i, width, height, samplerate, samplesize, channels, audiocodecid, videocodecid; int i, width, height, samplerate, samplesize, channels, audiocodecid, videocodecid;
double framerate = 0.0; double framerate = 0.0;
@ -256,7 +256,7 @@ static int flv_write_trailer(AVFormatContext *s)
{ {
int64_t file_size; int64_t file_size;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
FLVContext *flv = s->priv_data; FLVContext *flv = s->priv_data;
file_size = url_ftell(pb); file_size = url_ftell(pb);
@ -273,7 +273,7 @@ static int flv_write_trailer(AVFormatContext *s)
static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) static int flv_write_packet(AVFormatContext *s, AVPacket *pkt)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVCodecContext *enc = s->streams[pkt->stream_index]->codec; AVCodecContext *enc = s->streams[pkt->stream_index]->codec;
FLVContext *flv = s->priv_data; FLVContext *flv = s->priv_data;
int size= pkt->size; int size= pkt->size;

View File

@ -27,8 +27,8 @@ static int framecrc_write_packet(struct AVFormatContext *s, AVPacket *pkt)
char buf[256]; char buf[256];
snprintf(buf, sizeof(buf), "%d, %"PRId64", %d, 0x%08x\n", pkt->stream_index, pkt->dts, pkt->size, crc); snprintf(buf, sizeof(buf), "%d, %"PRId64", %d, 0x%08x\n", pkt->stream_index, pkt->dts, pkt->size, crc);
put_buffer(&s->pb, buf, strlen(buf)); put_buffer(s->pb, buf, strlen(buf));
put_flush_packet(&s->pb); put_flush_packet(s->pb);
return 0; return 0;
} }

View File

@ -313,7 +313,7 @@ typedef struct {
static int gif_write_header(AVFormatContext *s) static int gif_write_header(AVFormatContext *s)
{ {
GIFContext *gif = s->priv_data; GIFContext *gif = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVCodecContext *enc, *video_enc; AVCodecContext *enc, *video_enc;
int i, width, height, loop_count /*, rate*/; int i, width, height, loop_count /*, rate*/;
@ -348,14 +348,14 @@ static int gif_write_header(AVFormatContext *s)
gif_image_write_header(pb, width, height, loop_count, NULL); gif_image_write_header(pb, width, height, loop_count, NULL);
put_flush_packet(&s->pb); put_flush_packet(s->pb);
return 0; return 0;
} }
static int gif_write_video(AVFormatContext *s, static int gif_write_video(AVFormatContext *s,
AVCodecContext *enc, const uint8_t *buf, int size) AVCodecContext *enc, const uint8_t *buf, int size)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
GIFContext *gif = s->priv_data; GIFContext *gif = s->priv_data;
int jiffies; int jiffies;
int64_t delay; int64_t delay;
@ -383,7 +383,7 @@ static int gif_write_video(AVFormatContext *s,
gif_image_write_image(pb, 0, 0, enc->width, enc->height, gif_image_write_image(pb, 0, 0, enc->width, enc->height,
buf, enc->width * 3, PIX_FMT_RGB24); buf, enc->width * 3, PIX_FMT_RGB24);
put_flush_packet(&s->pb); put_flush_packet(s->pb);
return 0; return 0;
} }
@ -398,10 +398,10 @@ static int gif_write_packet(AVFormatContext *s, AVPacket *pkt)
static int gif_write_trailer(AVFormatContext *s) static int gif_write_trailer(AVFormatContext *s)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
put_byte(pb, 0x3b); put_byte(pb, 0x3b);
put_flush_packet(&s->pb); put_flush_packet(s->pb);
return 0; return 0;
} }

View File

@ -526,7 +526,7 @@ static int gif_read_header(AVFormatContext * s1,
AVFormatParameters * ap) AVFormatParameters * ap)
{ {
GifState *s = s1->priv_data; GifState *s = s1->priv_data;
ByteIOContext *f = &s1->pb; ByteIOContext *f = s1->pb;
AVStream *st; AVStream *st;
s->f = f; s->f = f;

View File

@ -228,7 +228,7 @@ static void gxf_track_tags(ByteIOContext *pb, int *len, st_info_t *si) {
* \brief read index from FLT packet into stream 0 av_index * \brief read index from FLT packet into stream 0 av_index
*/ */
static void gxf_read_index(AVFormatContext *s, int pkt_len) { static void gxf_read_index(AVFormatContext *s, int pkt_len) {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream *st = s->streams[0]; AVStream *st = s->streams[0];
uint32_t fields_per_map = get_le32(pb); uint32_t fields_per_map = get_le32(pb);
uint32_t map_cnt = get_le32(pb); uint32_t map_cnt = get_le32(pb);
@ -252,7 +252,7 @@ static void gxf_read_index(AVFormatContext *s, int pkt_len) {
} }
static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) { static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
pkt_type_t pkt_type; pkt_type_t pkt_type;
int map_len; int map_len;
int len; int len;
@ -378,7 +378,7 @@ static int64_t gxf_resync_media(AVFormatContext *s, uint64_t max_interval, int t
int cur_track; int cur_track;
int64_t cur_timestamp = AV_NOPTS_VALUE; int64_t cur_timestamp = AV_NOPTS_VALUE;
int len; int len;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
pkt_type_t type; pkt_type_t type;
tmp = get_be32(pb); tmp = get_be32(pb);
start: start:
@ -408,7 +408,7 @@ out:
} }
static int gxf_packet(AVFormatContext *s, AVPacket *pkt) { static int gxf_packet(AVFormatContext *s, AVPacket *pkt) {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
pkt_type_t pkt_type; pkt_type_t pkt_type;
int pkt_len; int pkt_len;
while (!url_feof(pb)) { while (!url_feof(pb)) {
@ -466,7 +466,7 @@ static int gxf_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int
if (idx < st->nb_index_entries - 2) if (idx < st->nb_index_entries - 2)
maxlen = st->index_entries[idx + 2].pos - pos; maxlen = st->index_entries[idx + 2].pos - pos;
maxlen = FFMAX(maxlen, 200 * 1024); maxlen = FFMAX(maxlen, 200 * 1024);
url_fseek(&s->pb, pos, SEEK_SET); url_fseek(s->pb, pos, SEEK_SET);
found = gxf_resync_media(s, maxlen, -1, timestamp); found = gxf_resync_media(s, maxlen, -1, timestamp);
if (FFABS(found - timestamp) > 4) if (FFABS(found - timestamp) > 4)
return -1; return -1;
@ -475,7 +475,7 @@ static int gxf_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int
static int64_t gxf_read_timestamp(AVFormatContext *s, int stream_index, static int64_t gxf_read_timestamp(AVFormatContext *s, int stream_index,
int64_t *pos, int64_t pos_limit) { int64_t *pos, int64_t pos_limit) {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int64_t res; int64_t res;
url_fseek(pb, *pos, SEEK_SET); url_fseek(pb, *pos, SEEK_SET);
res = gxf_resync_media(s, pos_limit - *pos, -1, -1); res = gxf_resync_media(s, pos_limit - *pos, -1, -1);

View File

@ -576,7 +576,7 @@ static int gxf_write_umf_packet(ByteIOContext *pb, GXFContext *ctx)
static int gxf_write_header(AVFormatContext *s) static int gxf_write_header(AVFormatContext *s)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
GXFContext *gxf = s->priv_data; GXFContext *gxf = s->priv_data;
int i; int i;
@ -671,7 +671,7 @@ static int gxf_write_eos_packet(ByteIOContext *pb, GXFContext *ctx)
static int gxf_write_trailer(AVFormatContext *s) static int gxf_write_trailer(AVFormatContext *s)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
GXFContext *gxf = s->priv_data; GXFContext *gxf = s->priv_data;
offset_t end; offset_t end;
int i; int i;
@ -763,8 +763,8 @@ static int gxf_write_packet(AVFormatContext *s, AVPacket *pkt)
{ {
GXFContext *gxf = s->priv_data; GXFContext *gxf = s->priv_data;
gxf_write_media_packet(&s->pb, gxf, pkt); gxf_write_media_packet(s->pb, gxf, pkt);
put_flush_packet(&s->pb); put_flush_packet(s->pb);
return 0; return 0;
} }

View File

@ -136,7 +136,7 @@ static int idcin_probe(AVProbeData *p)
static int idcin_read_header(AVFormatContext *s, static int idcin_read_header(AVFormatContext *s,
AVFormatParameters *ap) AVFormatParameters *ap)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
IdcinDemuxContext *idcin = s->priv_data; IdcinDemuxContext *idcin = s->priv_data;
AVStream *st; AVStream *st;
unsigned int width, height; unsigned int width, height;
@ -215,13 +215,13 @@ static int idcin_read_packet(AVFormatContext *s,
unsigned int command; unsigned int command;
unsigned int chunk_size; unsigned int chunk_size;
IdcinDemuxContext *idcin = s->priv_data; IdcinDemuxContext *idcin = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int i; int i;
int palette_scale; int palette_scale;
unsigned char r, g, b; unsigned char r, g, b;
unsigned char palette_buffer[768]; unsigned char palette_buffer[768];
if (url_feof(&s->pb)) if (url_feof(s->pb))
return AVERROR(EIO); return AVERROR(EIO);
if (idcin->next_chunk_is_video) { if (idcin->next_chunk_is_video) {

View File

@ -69,7 +69,7 @@ static int roq_read_header(AVFormatContext *s,
AVFormatParameters *ap) AVFormatParameters *ap)
{ {
RoqDemuxContext *roq = s->priv_data; RoqDemuxContext *roq = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream *st; AVStream *st;
unsigned char preamble[RoQ_CHUNK_PREAMBLE_SIZE]; unsigned char preamble[RoQ_CHUNK_PREAMBLE_SIZE];
int i; int i;
@ -174,7 +174,7 @@ static int roq_read_packet(AVFormatContext *s,
AVPacket *pkt) AVPacket *pkt)
{ {
RoqDemuxContext *roq = s->priv_data; RoqDemuxContext *roq = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int ret = 0; int ret = 0;
unsigned int chunk_size; unsigned int chunk_size;
unsigned int chunk_type; unsigned int chunk_type;
@ -185,7 +185,7 @@ static int roq_read_packet(AVFormatContext *s,
while (!packet_read) { while (!packet_read) {
if (url_feof(&s->pb)) if (url_feof(s->pb))
return AVERROR(EIO); return AVERROR(EIO);
/* get the next chunk preamble */ /* get the next chunk preamble */

View File

@ -239,7 +239,7 @@ static int img_read_packet(AVFormatContext *s1, AVPacket *pkt)
char filename[1024]; char filename[1024];
int i; int i;
int size[3]={0}, ret[3]={0}; int size[3]={0}, ret[3]={0};
ByteIOContext f1[3], *f[3]= {&f1[0], &f1[1], &f1[2]}; ByteIOContext *f[3];
AVCodecContext *codec= s1->streams[0]->codec; AVCodecContext *codec= s1->streams[0]->codec;
if (!s->is_pipe) { if (!s->is_pipe) {
@ -251,7 +251,7 @@ static int img_read_packet(AVFormatContext *s1, AVPacket *pkt)
s->path, s->img_number)<0 && s->img_number > 1) s->path, s->img_number)<0 && s->img_number > 1)
return AVERROR(EIO); return AVERROR(EIO);
for(i=0; i<3; i++){ for(i=0; i<3; i++){
if (url_fopen(f[i], filename, URL_RDONLY) < 0) if (url_fopen(&f[i], filename, URL_RDONLY) < 0)
return AVERROR(EIO); return AVERROR(EIO);
size[i]= url_fsize(f[i]); size[i]= url_fsize(f[i]);
@ -263,7 +263,7 @@ static int img_read_packet(AVFormatContext *s1, AVPacket *pkt)
if(codec->codec_id == CODEC_ID_RAWVIDEO && !codec->width) if(codec->codec_id == CODEC_ID_RAWVIDEO && !codec->width)
infer_size(&codec->width, &codec->height, size[0]); infer_size(&codec->width, &codec->height, size[0]);
} else { } else {
f[0] = &s1->pb; f[0] = s1->pb;
if (url_feof(f[0])) if (url_feof(f[0]))
return AVERROR(EIO); return AVERROR(EIO);
size[0]= 4096; size[0]= 4096;
@ -322,7 +322,7 @@ static int img_write_header(AVFormatContext *s)
static int img_write_packet(AVFormatContext *s, AVPacket *pkt) static int img_write_packet(AVFormatContext *s, AVPacket *pkt)
{ {
VideoData *img = s->priv_data; VideoData *img = s->priv_data;
ByteIOContext pb1[3], *pb[3]= {&pb1[0], &pb1[1], &pb1[2]}; ByteIOContext *pb[3];
char filename[1024]; char filename[1024];
AVCodecContext *codec= s->streams[ pkt->stream_index ]->codec; AVCodecContext *codec= s->streams[ pkt->stream_index ]->codec;
int i; int i;
@ -332,7 +332,7 @@ static int img_write_packet(AVFormatContext *s, AVPacket *pkt)
img->path, img->img_number) < 0 && img->img_number>1) img->path, img->img_number) < 0 && img->img_number>1)
return AVERROR(EIO); return AVERROR(EIO);
for(i=0; i<3; i++){ for(i=0; i<3; i++){
if (url_fopen(pb[i], filename, URL_WRONLY) < 0) if (url_fopen(&pb[i], filename, URL_WRONLY) < 0)
return AVERROR(EIO); return AVERROR(EIO);
if(codec->codec_id != CODEC_ID_RAWVIDEO) if(codec->codec_id != CODEC_ID_RAWVIDEO)
@ -340,7 +340,7 @@ static int img_write_packet(AVFormatContext *s, AVPacket *pkt)
filename[ strlen(filename) - 1 ]= 'U' + i; filename[ strlen(filename) - 1 ]= 'U' + i;
} }
} else { } else {
pb[0] = &s->pb; pb[0] = s->pb;
} }
if(codec->codec_id == CODEC_ID_RAWVIDEO){ if(codec->codec_id == CODEC_ID_RAWVIDEO){

View File

@ -517,7 +517,7 @@ static int ipmovie_read_header(AVFormatContext *s,
AVFormatParameters *ap) AVFormatParameters *ap)
{ {
IPMVEContext *ipmovie = s->priv_data; IPMVEContext *ipmovie = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVPacket pkt; AVPacket pkt;
AVStream *st; AVStream *st;
unsigned char chunk_preamble[CHUNK_PREAMBLE_SIZE]; unsigned char chunk_preamble[CHUNK_PREAMBLE_SIZE];
@ -589,7 +589,7 @@ static int ipmovie_read_packet(AVFormatContext *s,
AVPacket *pkt) AVPacket *pkt)
{ {
IPMVEContext *ipmovie = s->priv_data; IPMVEContext *ipmovie = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int ret; int ret;
ret = process_ipmovie_chunk(ipmovie, pb, pkt); ret = process_ipmovie_chunk(ipmovie, pb, pkt);

View File

@ -54,7 +54,7 @@ static int av_write(void * h, size_t len, const uint8_t * buf) {
static int nut_write_header(AVFormatContext * avf) { static int nut_write_header(AVFormatContext * avf) {
NUTContext * priv = avf->priv_data; NUTContext * priv = avf->priv_data;
ByteIOContext * bc = &avf->pb; ByteIOContext * bc = avf->pb;
nut_muxer_opts_t mopts = { nut_muxer_opts_t mopts = {
.output = { .output = {
.priv = bc, .priv = bc,
@ -137,7 +137,7 @@ static int nut_write_packet(AVFormatContext * avf, AVPacket * pkt) {
} }
static int nut_write_trailer(AVFormatContext * avf) { static int nut_write_trailer(AVFormatContext * avf) {
ByteIOContext * bc = &avf->pb; ByteIOContext * bc = avf->pb;
NUTContext * priv = avf->priv_data; NUTContext * priv = avf->priv_data;
int i; int i;
@ -187,7 +187,7 @@ static off_t av_seek(void * h, long long pos, int whence) {
static int nut_read_header(AVFormatContext * avf, AVFormatParameters * ap) { static int nut_read_header(AVFormatContext * avf, AVFormatParameters * ap) {
NUTContext * priv = avf->priv_data; NUTContext * priv = avf->priv_data;
ByteIOContext * bc = &avf->pb; ByteIOContext * bc = avf->pb;
nut_demuxer_opts_t dopts = { nut_demuxer_opts_t dopts = {
.input = { .input = {
.priv = bc, .priv = bc,
@ -272,7 +272,7 @@ static int nut_read_packet(AVFormatContext * avf, AVPacket * pkt) {
if (pd.flags & NUT_FLAG_KEY) pkt->flags |= PKT_FLAG_KEY; if (pd.flags & NUT_FLAG_KEY) pkt->flags |= PKT_FLAG_KEY;
pkt->pts = pd.pts; pkt->pts = pd.pts;
pkt->stream_index = pd.stream; pkt->stream_index = pd.stream;
pkt->pos = url_ftell(&avf->pb); pkt->pos = url_ftell(avf->pb);
ret = nut_read_frame(priv->nut, &pd.len, pkt->data); ret = nut_read_frame(priv->nut, &pd.len, pkt->data);

View File

@ -176,7 +176,7 @@ typedef struct MatroskaDemuxContext {
static int static int
ebml_read_element_level_up (MatroskaDemuxContext *matroska) ebml_read_element_level_up (MatroskaDemuxContext *matroska)
{ {
ByteIOContext *pb = &matroska->ctx->pb; ByteIOContext *pb = matroska->ctx->pb;
offset_t pos = url_ftell(pb); offset_t pos = url_ftell(pb);
int num = 0; int num = 0;
@ -208,7 +208,7 @@ ebml_read_num (MatroskaDemuxContext *matroska,
int max_size, int max_size,
uint64_t *number) uint64_t *number)
{ {
ByteIOContext *pb = &matroska->ctx->pb; ByteIOContext *pb = matroska->ctx->pb;
int len_mask = 0x80, read = 1, n = 1; int len_mask = 0x80, read = 1, n = 1;
int64_t total = 0; int64_t total = 0;
@ -325,7 +325,7 @@ static int
ebml_read_seek (MatroskaDemuxContext *matroska, ebml_read_seek (MatroskaDemuxContext *matroska,
offset_t offset) offset_t offset)
{ {
ByteIOContext *pb = &matroska->ctx->pb; ByteIOContext *pb = matroska->ctx->pb;
/* clear ID cache, if any */ /* clear ID cache, if any */
matroska->peek_id = 0; matroska->peek_id = 0;
@ -341,7 +341,7 @@ ebml_read_seek (MatroskaDemuxContext *matroska,
static int static int
ebml_read_skip (MatroskaDemuxContext *matroska) ebml_read_skip (MatroskaDemuxContext *matroska)
{ {
ByteIOContext *pb = &matroska->ctx->pb; ByteIOContext *pb = matroska->ctx->pb;
uint32_t id; uint32_t id;
uint64_t length; uint64_t length;
int res; int res;
@ -365,7 +365,7 @@ ebml_read_uint (MatroskaDemuxContext *matroska,
uint32_t *id, uint32_t *id,
uint64_t *num) uint64_t *num)
{ {
ByteIOContext *pb = &matroska->ctx->pb; ByteIOContext *pb = matroska->ctx->pb;
int n = 0, size, res; int n = 0, size, res;
uint64_t rlength; uint64_t rlength;
@ -399,7 +399,7 @@ ebml_read_sint (MatroskaDemuxContext *matroska,
uint32_t *id, uint32_t *id,
int64_t *num) int64_t *num)
{ {
ByteIOContext *pb = &matroska->ctx->pb; ByteIOContext *pb = matroska->ctx->pb;
int size, n = 1, negative = 0, res; int size, n = 1, negative = 0, res;
uint64_t rlength; uint64_t rlength;
@ -438,7 +438,7 @@ ebml_read_float (MatroskaDemuxContext *matroska,
uint32_t *id, uint32_t *id,
double *num) double *num)
{ {
ByteIOContext *pb = &matroska->ctx->pb; ByteIOContext *pb = matroska->ctx->pb;
int size, res; int size, res;
uint64_t rlength; uint64_t rlength;
@ -472,7 +472,7 @@ ebml_read_ascii (MatroskaDemuxContext *matroska,
uint32_t *id, uint32_t *id,
char **str) char **str)
{ {
ByteIOContext *pb = &matroska->ctx->pb; ByteIOContext *pb = matroska->ctx->pb;
int size, res; int size, res;
uint64_t rlength; uint64_t rlength;
@ -534,7 +534,7 @@ static int
ebml_read_master (MatroskaDemuxContext *matroska, ebml_read_master (MatroskaDemuxContext *matroska,
uint32_t *id) uint32_t *id)
{ {
ByteIOContext *pb = &matroska->ctx->pb; ByteIOContext *pb = matroska->ctx->pb;
uint64_t length; uint64_t length;
MatroskaLevel *level; MatroskaLevel *level;
int res; int res;
@ -569,7 +569,7 @@ ebml_read_binary (MatroskaDemuxContext *matroska,
uint8_t **binary, uint8_t **binary,
int *size) int *size)
{ {
ByteIOContext *pb = &matroska->ctx->pb; ByteIOContext *pb = matroska->ctx->pb;
uint64_t rlength; uint64_t rlength;
int res; int res;
@ -1748,7 +1748,7 @@ matroska_parse_seekhead (MatroskaDemuxContext *matroska)
/* remember the peeked ID and the current position */ /* remember the peeked ID and the current position */
peek_id_cache = matroska->peek_id; peek_id_cache = matroska->peek_id;
before_pos = url_ftell(&matroska->ctx->pb); before_pos = url_ftell(matroska->ctx->pb);
/* seek */ /* seek */
if ((res = ebml_read_seek(matroska, seek_pos + if ((res = ebml_read_seek(matroska, seek_pos +
@ -1788,14 +1788,14 @@ matroska_parse_seekhead (MatroskaDemuxContext *matroska)
switch (id) { switch (id) {
case MATROSKA_ID_CUES: case MATROSKA_ID_CUES:
if (!(res = matroska_parse_index(matroska)) || if (!(res = matroska_parse_index(matroska)) ||
url_feof(&matroska->ctx->pb)) { url_feof(matroska->ctx->pb)) {
matroska->index_parsed = 1; matroska->index_parsed = 1;
res = 0; res = 0;
} }
break; break;
case MATROSKA_ID_TAGS: case MATROSKA_ID_TAGS:
if (!(res = matroska_parse_metadata(matroska)) || if (!(res = matroska_parse_metadata(matroska)) ||
url_feof(&matroska->ctx->pb)) { url_feof(matroska->ctx->pb)) {
matroska->metadata_parsed = 1; matroska->metadata_parsed = 1;
res = 0; res = 0;
} }
@ -1931,7 +1931,7 @@ matroska_read_header (AVFormatContext *s,
* after the segment ID/length. */ * after the segment ID/length. */
if ((res = ebml_read_master(matroska, &id)) < 0) if ((res = ebml_read_master(matroska, &id)) < 0)
return res; return res;
matroska->segment_start = url_ftell(&s->pb); matroska->segment_start = url_ftell(s->pb);
matroska->time_scale = 1000000; matroska->time_scale = 1000000;
/* we've found our segment, start reading the different contents in here */ /* we've found our segment, start reading the different contents in here */
@ -2485,7 +2485,7 @@ matroska_parse_blockgroup (MatroskaDemuxContext *matroska,
* of the harder things, so this code is a bit complicated. * of the harder things, so this code is a bit complicated.
* See http://www.matroska.org/ for documentation. */ * See http://www.matroska.org/ for documentation. */
case MATROSKA_ID_BLOCK: { case MATROSKA_ID_BLOCK: {
pos = url_ftell(&matroska->ctx->pb); pos = url_ftell(matroska->ctx->pb);
res = ebml_read_binary(matroska, &id, &data, &size); res = ebml_read_binary(matroska, &id, &data, &size);
break; break;
} }
@ -2547,7 +2547,7 @@ matroska_parse_cluster (MatroskaDemuxContext *matroska)
int size; int size;
av_log(matroska->ctx, AV_LOG_DEBUG, av_log(matroska->ctx, AV_LOG_DEBUG,
"parsing cluster at %"PRId64"\n", url_ftell(&matroska->ctx->pb)); "parsing cluster at %"PRId64"\n", url_ftell(matroska->ctx->pb));
while (res == 0) { while (res == 0) {
if (!(id = ebml_peek_id(matroska, &matroska->level_up))) { if (!(id = ebml_peek_id(matroska, &matroska->level_up))) {
@ -2576,7 +2576,7 @@ matroska_parse_cluster (MatroskaDemuxContext *matroska)
break; break;
case MATROSKA_ID_SIMPLEBLOCK: case MATROSKA_ID_SIMPLEBLOCK:
pos = url_ftell(&matroska->ctx->pb); pos = url_ftell(matroska->ctx->pb);
res = ebml_read_binary(matroska, &id, &data, &size); res = ebml_read_binary(matroska, &id, &data, &size);
if (res == 0) if (res == 0)
res = matroska_parse_block(matroska, data, size, pos, res = matroska_parse_block(matroska, data, size, pos,
@ -2668,7 +2668,7 @@ matroska_read_seek (AVFormatContext *s, int stream_index, int64_t timestamp,
return 0; return 0;
/* do the seek */ /* do the seek */
url_fseek(&s->pb, st->index_entries[index].pos, SEEK_SET); url_fseek(s->pb, st->index_entries[index].pos, SEEK_SET);
matroska->skip_to_keyframe = !(flags & AVSEEK_FLAG_ANY); matroska->skip_to_keyframe = !(flags & AVSEEK_FLAG_ANY);
matroska->skip_to_stream = st; matroska->skip_to_stream = st;
matroska->num_packets = 0; matroska->num_packets = 0;

View File

@ -466,19 +466,21 @@ static void get_aac_sample_rates(AVFormatContext *s, AVCodecContext *codec, int
static int mkv_write_codecprivate(AVFormatContext *s, ByteIOContext *pb, AVCodecContext *codec, int native_id) static int mkv_write_codecprivate(AVFormatContext *s, ByteIOContext *pb, AVCodecContext *codec, int native_id)
{ {
ByteIOContext dyn_cp; ByteIOContext *dyn_cp;
uint8_t *codecpriv; uint8_t *codecpriv;
int ret = 0, codecpriv_size; int ret, codecpriv_size;
url_open_dyn_buf(&dyn_cp); ret = url_open_dyn_buf(&dyn_cp);
if(ret < 0)
return ret;
if (native_id) { if (native_id) {
if (codec->codec_id == CODEC_ID_VORBIS || codec->codec_id == CODEC_ID_THEORA) if (codec->codec_id == CODEC_ID_VORBIS || codec->codec_id == CODEC_ID_THEORA)
ret = put_xiph_codecpriv(s, &dyn_cp, codec); ret = put_xiph_codecpriv(s, dyn_cp, codec);
else if (codec->codec_id == CODEC_ID_FLAC) else if (codec->codec_id == CODEC_ID_FLAC)
ret = put_flac_codecpriv(s, &dyn_cp, codec); ret = put_flac_codecpriv(s, dyn_cp, codec);
else if (codec->extradata_size) else if (codec->extradata_size)
put_buffer(&dyn_cp, codec->extradata, codec->extradata_size); put_buffer(dyn_cp, codec->extradata, codec->extradata_size);
} else if (codec->codec_type == CODEC_TYPE_VIDEO) { } else if (codec->codec_type == CODEC_TYPE_VIDEO) {
if (!codec->codec_tag) if (!codec->codec_tag)
codec->codec_tag = codec_get_tag(codec_bmp_tags, codec->codec_id); codec->codec_tag = codec_get_tag(codec_bmp_tags, codec->codec_id);
@ -487,7 +489,7 @@ static int mkv_write_codecprivate(AVFormatContext *s, ByteIOContext *pb, AVCodec
ret = -1; ret = -1;
} }
put_bmp_header(&dyn_cp, codec, codec_bmp_tags, 0); put_bmp_header(dyn_cp, codec, codec_bmp_tags, 0);
} else if (codec->codec_type == CODEC_TYPE_AUDIO) { } else if (codec->codec_type == CODEC_TYPE_AUDIO) {
if (!codec->codec_tag) if (!codec->codec_tag)
@ -497,10 +499,10 @@ static int mkv_write_codecprivate(AVFormatContext *s, ByteIOContext *pb, AVCodec
ret = -1; ret = -1;
} }
put_wav_header(&dyn_cp, codec); put_wav_header(dyn_cp, codec);
} }
codecpriv_size = url_close_dyn_buf(&dyn_cp, &codecpriv); codecpriv_size = url_close_dyn_buf(dyn_cp, &codecpriv);
if (codecpriv_size) if (codecpriv_size)
put_ebml_binary(pb, MATROSKA_ID_CODECPRIVATE, codecpriv, codecpriv_size); put_ebml_binary(pb, MATROSKA_ID_CODECPRIVATE, codecpriv, codecpriv_size);
av_free(codecpriv); av_free(codecpriv);
@ -510,7 +512,7 @@ static int mkv_write_codecprivate(AVFormatContext *s, ByteIOContext *pb, AVCodec
static int mkv_write_tracks(AVFormatContext *s) static int mkv_write_tracks(AVFormatContext *s)
{ {
MatroskaMuxContext *mkv = s->priv_data; MatroskaMuxContext *mkv = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
ebml_master tracks; ebml_master tracks;
int i, j, ret; int i, j, ret;
@ -613,7 +615,7 @@ static int mkv_write_tracks(AVFormatContext *s)
static int mkv_write_header(AVFormatContext *s) static int mkv_write_header(AVFormatContext *s)
{ {
MatroskaMuxContext *mkv = s->priv_data; MatroskaMuxContext *mkv = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
ebml_master ebml_header, segment_info; ebml_master ebml_header, segment_info;
int ret; int ret;
@ -703,7 +705,7 @@ static int mkv_blockgroup_size(AVPacket *pkt)
static void mkv_write_block(AVFormatContext *s, unsigned int blockid, AVPacket *pkt, int flags) static void mkv_write_block(AVFormatContext *s, unsigned int blockid, AVPacket *pkt, int flags)
{ {
MatroskaMuxContext *mkv = s->priv_data; MatroskaMuxContext *mkv = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
av_log(s, AV_LOG_DEBUG, "Writing block at offset %" PRIu64 ", size %d, " av_log(s, AV_LOG_DEBUG, "Writing block at offset %" PRIu64 ", size %d, "
"pts %" PRId64 ", dts %" PRId64 ", duration %d, flags %d\n", "pts %" PRId64 ", dts %" PRId64 ", duration %d, flags %d\n",
@ -719,7 +721,7 @@ static void mkv_write_block(AVFormatContext *s, unsigned int blockid, AVPacket *
static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt) static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt)
{ {
MatroskaMuxContext *mkv = s->priv_data; MatroskaMuxContext *mkv = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVCodecContext *codec = s->streams[pkt->stream_index]->codec; AVCodecContext *codec = s->streams[pkt->stream_index]->codec;
int keyframe = !!(pkt->flags & PKT_FLAG_KEY); int keyframe = !!(pkt->flags & PKT_FLAG_KEY);
int ret; int ret;
@ -761,7 +763,7 @@ static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt)
static int mkv_write_trailer(AVFormatContext *s) static int mkv_write_trailer(AVFormatContext *s)
{ {
MatroskaMuxContext *mkv = s->priv_data; MatroskaMuxContext *mkv = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
offset_t currentpos, second_seekhead, cuespos; offset_t currentpos, second_seekhead, cuespos;
int ret; int ret;

View File

@ -72,7 +72,7 @@ static int mm_read_header(AVFormatContext *s,
AVFormatParameters *ap) AVFormatParameters *ap)
{ {
MmDemuxContext *mm = s->priv_data; MmDemuxContext *mm = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream *st; AVStream *st;
unsigned int type, length; unsigned int type, length;
@ -127,7 +127,7 @@ static int mm_read_packet(AVFormatContext *s,
AVPacket *pkt) AVPacket *pkt)
{ {
MmDemuxContext *mm = s->priv_data; MmDemuxContext *mm = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
unsigned char preamble[MM_PREAMBLE_SIZE]; unsigned char preamble[MM_PREAMBLE_SIZE];
unsigned char pal[MM_PALETTE_SIZE]; unsigned char pal[MM_PALETTE_SIZE];
unsigned int type, length; unsigned int type, length;
@ -178,7 +178,7 @@ static int mm_read_packet(AVFormatContext *s,
return 0; return 0;
case MM_TYPE_AUDIO : case MM_TYPE_AUDIO :
if (av_get_packet(&s->pb, pkt, length)<0) if (av_get_packet(s->pb, pkt, length)<0)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
pkt->size = length; pkt->size = length;
pkt->stream_index = 1; pkt->stream_index = 1;

View File

@ -60,7 +60,7 @@ static void end_tag_be(ByteIOContext *pb, offset_t start)
static int mmf_write_header(AVFormatContext *s) static int mmf_write_header(AVFormatContext *s)
{ {
MMFContext *mmf = s->priv_data; MMFContext *mmf = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
offset_t pos; offset_t pos;
int rate; int rate;
@ -108,7 +108,7 @@ static int mmf_write_header(AVFormatContext *s)
static int mmf_write_packet(AVFormatContext *s, AVPacket *pkt) static int mmf_write_packet(AVFormatContext *s, AVPacket *pkt)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
put_buffer(pb, pkt->data, pkt->size); put_buffer(pb, pkt->data, pkt->size);
return 0; return 0;
} }
@ -127,12 +127,12 @@ static void put_varlength(ByteIOContext *pb, int val)
static int mmf_write_trailer(AVFormatContext *s) static int mmf_write_trailer(AVFormatContext *s)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
MMFContext *mmf = s->priv_data; MMFContext *mmf = s->priv_data;
offset_t pos, size; offset_t pos, size;
int gatetime; int gatetime;
if (!url_is_streamed(&s->pb)) { if (!url_is_streamed(s->pb)) {
/* Fill in length fields */ /* Fill in length fields */
end_tag_be(pb, mmf->awapos); end_tag_be(pb, mmf->awapos);
end_tag_be(pb, mmf->atrpos); end_tag_be(pb, mmf->atrpos);
@ -183,7 +183,7 @@ static int mmf_read_header(AVFormatContext *s,
{ {
MMFContext *mmf = s->priv_data; MMFContext *mmf = s->priv_data;
unsigned int tag; unsigned int tag;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream *st; AVStream *st;
offset_t file_size, size; offset_t file_size, size;
int rate, params; int rate, params;
@ -265,7 +265,7 @@ static int mmf_read_packet(AVFormatContext *s,
AVStream *st; AVStream *st;
int ret, size; int ret, size;
if (url_feof(&s->pb)) if (url_feof(s->pb))
return AVERROR(EIO); return AVERROR(EIO);
st = s->streams[0]; st = s->streams[0];
@ -280,7 +280,7 @@ static int mmf_read_packet(AVFormatContext *s,
return AVERROR(EIO); return AVERROR(EIO);
pkt->stream_index = 0; pkt->stream_index = 0;
ret = get_buffer(&s->pb, pkt->data, pkt->size); ret = get_buffer(s->pb, pkt->data, pkt->size);
if (ret < 0) if (ret < 0)
av_free_packet(pkt); av_free_packet(pkt);

View File

@ -1423,7 +1423,7 @@ static void mov_build_index(MOVContext *mov, AVStream *st)
static int mov_read_header(AVFormatContext *s, AVFormatParameters *ap) static int mov_read_header(AVFormatContext *s, AVFormatParameters *ap)
{ {
MOVContext *mov = s->priv_data; MOVContext *mov = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int i, err; int i, err;
MOV_atom_t atom = { 0, 0, 0 }; MOV_atom_t atom = { 0, 0, 0 };
@ -1516,7 +1516,7 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
return -1; return -1;
/* must be done just before reading, to avoid infinite loop on sample */ /* must be done just before reading, to avoid infinite loop on sample */
sc->current_sample++; sc->current_sample++;
if (sample->pos >= url_fsize(&s->pb)) { if (sample->pos >= url_fsize(s->pb)) {
av_log(mov->fc, AV_LOG_ERROR, "stream %d, offset 0x%"PRIx64": partial file\n", sc->ffindex, sample->pos); av_log(mov->fc, AV_LOG_ERROR, "stream %d, offset 0x%"PRIx64": partial file\n", sc->ffindex, sample->pos);
return -1; return -1;
} }
@ -1526,8 +1526,8 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
dprintf(s, "dv audio pkt size %d\n", pkt->size); dprintf(s, "dv audio pkt size %d\n", pkt->size);
} else { } else {
#endif #endif
url_fseek(&s->pb, sample->pos, SEEK_SET); url_fseek(s->pb, sample->pos, SEEK_SET);
av_get_packet(&s->pb, pkt, sample->size); av_get_packet(s->pb, pkt, sample->size);
#ifdef CONFIG_DV_DEMUXER #ifdef CONFIG_DV_DEMUXER
if (mov->dv_demux) { if (mov->dv_demux) {
void *pkt_destruct_func = pkt->destruct; void *pkt_destruct_func = pkt->destruct;

View File

@ -442,24 +442,27 @@ static uint8_t *avc_find_startcode( uint8_t *p, uint8_t *end )
return end + 3; return end + 3;
} }
static void avc_parse_nal_units(uint8_t **buf, int *size) static int avc_parse_nal_units(uint8_t **buf, int *size)
{ {
ByteIOContext pb; ByteIOContext *pb;
uint8_t *p = *buf; uint8_t *p = *buf;
uint8_t *end = p + *size; uint8_t *end = p + *size;
uint8_t *nal_start, *nal_end; uint8_t *nal_start, *nal_end;
int ret = url_open_dyn_buf(&pb);
if(ret < 0)
return ret;
url_open_dyn_buf(&pb);
nal_start = avc_find_startcode(p, end); nal_start = avc_find_startcode(p, end);
while (nal_start < end) { while (nal_start < end) {
while(!*(nal_start++)); while(!*(nal_start++));
nal_end = avc_find_startcode(nal_start, end); nal_end = avc_find_startcode(nal_start, end);
put_be32(&pb, nal_end - nal_start); put_be32(pb, nal_end - nal_start);
put_buffer(&pb, nal_start, nal_end - nal_start); put_buffer(pb, nal_start, nal_end - nal_start);
nal_start = nal_end; nal_start = nal_end;
} }
av_freep(buf); av_freep(buf);
*size = url_close_dyn_buf(&pb, buf); *size = url_close_dyn_buf(pb, buf);
return 0;
} }
static int mov_write_avcc_tag(ByteIOContext *pb, MOVTrack *track) static int mov_write_avcc_tag(ByteIOContext *pb, MOVTrack *track)
@ -1508,11 +1511,11 @@ static void mov_write_uuidprof_tag(ByteIOContext *pb, AVFormatContext *s)
static int mov_write_header(AVFormatContext *s) static int mov_write_header(AVFormatContext *s)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
MOVContext *mov = s->priv_data; MOVContext *mov = s->priv_data;
int i; int i;
if (url_is_streamed(&s->pb)) { if (url_is_streamed(s->pb)) {
av_log(s, AV_LOG_ERROR, "muxer does not support non seekable output\n"); av_log(s, AV_LOG_ERROR, "muxer does not support non seekable output\n");
return -1; return -1;
} }
@ -1579,13 +1582,13 @@ static int mov_write_header(AVFormatContext *s)
static int mov_write_packet(AVFormatContext *s, AVPacket *pkt) static int mov_write_packet(AVFormatContext *s, AVPacket *pkt)
{ {
MOVContext *mov = s->priv_data; MOVContext *mov = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
MOVTrack *trk = &mov->tracks[pkt->stream_index]; MOVTrack *trk = &mov->tracks[pkt->stream_index];
AVCodecContext *enc = trk->enc; AVCodecContext *enc = trk->enc;
unsigned int samplesInChunk = 0; unsigned int samplesInChunk = 0;
int size= pkt->size; int size= pkt->size;
if (url_is_streamed(&s->pb)) return 0; /* Can't handle that */ if (url_is_streamed(s->pb)) return 0; /* Can't handle that */
if (!size) return 0; /* Discard 0 sized packets */ if (!size) return 0; /* Discard 0 sized packets */
if (enc->codec_id == CODEC_ID_AMR_NB) { if (enc->codec_id == CODEC_ID_AMR_NB) {
@ -1663,7 +1666,7 @@ static int mov_write_packet(AVFormatContext *s, AVPacket *pkt)
static int mov_write_trailer(AVFormatContext *s) static int mov_write_trailer(AVFormatContext *s)
{ {
MOVContext *mov = s->priv_data; MOVContext *mov = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int res = 0; int res = 0;
int i; int i;

View File

@ -190,20 +190,20 @@ static void id3v2_read_ttag(AVFormatContext *s, int taglen, char *dst, int dstle
taglen--; /* account for encoding type byte */ taglen--; /* account for encoding type byte */
dstlen--; /* Leave space for zero terminator */ dstlen--; /* Leave space for zero terminator */
switch(get_byte(&s->pb)) { /* encoding type */ switch(get_byte(s->pb)) { /* encoding type */
case 0: /* ISO-8859-1 (0 - 255 maps directly into unicode) */ case 0: /* ISO-8859-1 (0 - 255 maps directly into unicode) */
q = dst; q = dst;
while(taglen--) { while(taglen--) {
uint8_t tmp; uint8_t tmp;
PUT_UTF8(get_byte(&s->pb), tmp, if (q - dst < dstlen - 1) *q++ = tmp;) PUT_UTF8(get_byte(s->pb), tmp, if (q - dst < dstlen - 1) *q++ = tmp;)
} }
*q = '\0'; *q = '\0';
break; break;
case 3: /* UTF-8 */ case 3: /* UTF-8 */
len = FFMIN(taglen, dstlen); len = FFMIN(taglen, dstlen);
get_buffer(&s->pb, dst, len); get_buffer(s->pb, dst, len);
dst[len] = 0; dst[len] = 0;
break; break;
} }
@ -252,23 +252,23 @@ static void id3v2_parse(AVFormatContext *s, int len, uint8_t version, uint8_t fl
} }
if(isv34 && flags & 0x40) /* Extended header present, just skip over it */ if(isv34 && flags & 0x40) /* Extended header present, just skip over it */
url_fskip(&s->pb, id3v2_get_size(&s->pb, 4)); url_fskip(s->pb, id3v2_get_size(s->pb, 4));
while(len >= taghdrlen) { while(len >= taghdrlen) {
if(isv34) { if(isv34) {
tag = get_be32(&s->pb); tag = get_be32(s->pb);
tlen = id3v2_get_size(&s->pb, 4); tlen = id3v2_get_size(s->pb, 4);
get_be16(&s->pb); /* flags */ get_be16(s->pb); /* flags */
} else { } else {
tag = get_be24(&s->pb); tag = get_be24(s->pb);
tlen = id3v2_get_size(&s->pb, 3); tlen = id3v2_get_size(s->pb, 3);
} }
len -= taghdrlen + tlen; len -= taghdrlen + tlen;
if(len < 0) if(len < 0)
break; break;
next = url_ftell(&s->pb) + tlen; next = url_ftell(s->pb) + tlen;
switch(tag) { switch(tag) {
case MKBETAG('T', 'I', 'T', '2'): case MKBETAG('T', 'I', 'T', '2'):
@ -298,21 +298,21 @@ static void id3v2_parse(AVFormatContext *s, int len, uint8_t version, uint8_t fl
break; break;
case 0: case 0:
/* padding, skip to end */ /* padding, skip to end */
url_fskip(&s->pb, len); url_fskip(s->pb, len);
len = 0; len = 0;
continue; continue;
} }
/* Skip to end of tag */ /* Skip to end of tag */
url_fseek(&s->pb, next, SEEK_SET); url_fseek(s->pb, next, SEEK_SET);
} }
if(version == 4 && flags & 0x10) /* Footer preset, always 10 bytes, skip over it */ if(version == 4 && flags & 0x10) /* Footer preset, always 10 bytes, skip over it */
url_fskip(&s->pb, 10); url_fskip(s->pb, 10);
return; return;
error: error:
av_log(s, AV_LOG_INFO, "ID3v2.%d tag skipped, cannot handle %s\n", version, reason); av_log(s, AV_LOG_INFO, "ID3v2.%d tag skipped, cannot handle %s\n", version, reason);
url_fskip(&s->pb, len); url_fskip(s->pb, len);
} }
static void id3v1_get_string(char *str, int str_size, static void id3v1_get_string(char *str, int str_size,
@ -435,7 +435,7 @@ static void mp3_parse_vbr_tags(AVFormatContext *s, AVStream *st, offset_t base)
const offset_t xing_offtbl[2][2] = {{32, 17}, {17,9}}; const offset_t xing_offtbl[2][2] = {{32, 17}, {17,9}};
MPADecodeContext c; MPADecodeContext c;
v = get_be32(&s->pb); v = get_be32(s->pb);
if(ff_mpa_check_header(v) < 0) if(ff_mpa_check_header(v) < 0)
return; return;
@ -444,23 +444,23 @@ static void mp3_parse_vbr_tags(AVFormatContext *s, AVStream *st, offset_t base)
return; return;
/* Check for Xing / Info tag */ /* Check for Xing / Info tag */
url_fseek(&s->pb, xing_offtbl[c.lsf == 1][c.nb_channels == 1], SEEK_CUR); url_fseek(s->pb, xing_offtbl[c.lsf == 1][c.nb_channels == 1], SEEK_CUR);
v = get_be32(&s->pb); v = get_be32(s->pb);
if(v == MKBETAG('X', 'i', 'n', 'g') || v == MKBETAG('I', 'n', 'f', 'o')) { if(v == MKBETAG('X', 'i', 'n', 'g') || v == MKBETAG('I', 'n', 'f', 'o')) {
v = get_be32(&s->pb); v = get_be32(s->pb);
if(v & 0x1) if(v & 0x1)
frames = get_be32(&s->pb); frames = get_be32(s->pb);
} }
/* Check for VBRI tag (always 32 bytes after end of mpegaudio header) */ /* Check for VBRI tag (always 32 bytes after end of mpegaudio header) */
url_fseek(&s->pb, base + 4 + 32, SEEK_SET); url_fseek(s->pb, base + 4 + 32, SEEK_SET);
v = get_be32(&s->pb); v = get_be32(s->pb);
if(v == MKBETAG('V', 'B', 'R', 'I')) { if(v == MKBETAG('V', 'B', 'R', 'I')) {
/* Check tag version */ /* Check tag version */
if(get_be16(&s->pb) == 1) { if(get_be16(s->pb) == 1) {
/* skip delay, quality and total bytes */ /* skip delay, quality and total bytes */
url_fseek(&s->pb, 8, SEEK_CUR); url_fseek(s->pb, 8, SEEK_CUR);
frames = get_be32(&s->pb); frames = get_be32(s->pb);
} }
} }
@ -490,21 +490,21 @@ static int mp3_read_header(AVFormatContext *s,
st->start_time = 0; st->start_time = 0;
/* try to get the TAG */ /* try to get the TAG */
if (!url_is_streamed(&s->pb)) { if (!url_is_streamed(s->pb)) {
/* XXX: change that */ /* XXX: change that */
filesize = url_fsize(&s->pb); filesize = url_fsize(s->pb);
if (filesize > 128) { if (filesize > 128) {
url_fseek(&s->pb, filesize - 128, SEEK_SET); url_fseek(s->pb, filesize - 128, SEEK_SET);
ret = get_buffer(&s->pb, buf, ID3v1_TAG_SIZE); ret = get_buffer(s->pb, buf, ID3v1_TAG_SIZE);
if (ret == ID3v1_TAG_SIZE) { if (ret == ID3v1_TAG_SIZE) {
id3v1_parse_tag(s, buf); id3v1_parse_tag(s, buf);
} }
url_fseek(&s->pb, 0, SEEK_SET); url_fseek(s->pb, 0, SEEK_SET);
} }
} }
/* if ID3v2 header found, skip it */ /* if ID3v2 header found, skip it */
ret = get_buffer(&s->pb, buf, ID3v2_HEADER_SIZE); ret = get_buffer(s->pb, buf, ID3v2_HEADER_SIZE);
if (ret != ID3v2_HEADER_SIZE) if (ret != ID3v2_HEADER_SIZE)
return -1; return -1;
if (id3v2_match(buf)) { if (id3v2_match(buf)) {
@ -515,12 +515,12 @@ static int mp3_read_header(AVFormatContext *s,
(buf[9] & 0x7f); (buf[9] & 0x7f);
id3v2_parse(s, len, buf[3], buf[5]); id3v2_parse(s, len, buf[3], buf[5]);
} else { } else {
url_fseek(&s->pb, 0, SEEK_SET); url_fseek(s->pb, 0, SEEK_SET);
} }
off = url_ftell(&s->pb); off = url_ftell(s->pb);
mp3_parse_vbr_tags(s, st, off); mp3_parse_vbr_tags(s, st, off);
url_fseek(&s->pb, off, SEEK_SET); url_fseek(s->pb, off, SEEK_SET);
/* the parameters will be extracted from the compressed bitstream */ /* the parameters will be extracted from the compressed bitstream */
return 0; return 0;
@ -535,7 +535,7 @@ static int mp3_read_packet(AVFormatContext *s, AVPacket *pkt)
size= MP3_PACKET_SIZE; size= MP3_PACKET_SIZE;
ret= av_get_packet(&s->pb, pkt, size); ret= av_get_packet(s->pb, pkt, size);
pkt->stream_index = 0; pkt->stream_index = 0;
if (ret <= 0) { if (ret <= 0) {
@ -557,20 +557,20 @@ static int mp3_read_close(AVFormatContext *s)
static void id3v2_put_size(AVFormatContext *s, int size) static void id3v2_put_size(AVFormatContext *s, int size)
{ {
put_byte(&s->pb, size >> 21 & 0x7f); put_byte(s->pb, size >> 21 & 0x7f);
put_byte(&s->pb, size >> 14 & 0x7f); put_byte(s->pb, size >> 14 & 0x7f);
put_byte(&s->pb, size >> 7 & 0x7f); put_byte(s->pb, size >> 7 & 0x7f);
put_byte(&s->pb, size & 0x7f); put_byte(s->pb, size & 0x7f);
} }
static void id3v2_put_ttag(AVFormatContext *s, char *string, uint32_t tag) static void id3v2_put_ttag(AVFormatContext *s, char *string, uint32_t tag)
{ {
int len = strlen(string); int len = strlen(string);
put_be32(&s->pb, tag); put_be32(s->pb, tag);
id3v2_put_size(s, len + 1); id3v2_put_size(s, len + 1);
put_be16(&s->pb, 0); put_be16(s->pb, 0);
put_byte(&s->pb, 3); /* UTF-8 */ put_byte(s->pb, 3); /* UTF-8 */
put_buffer(&s->pb, string, len); put_buffer(s->pb, string, len);
} }
@ -602,9 +602,9 @@ static int mp3_write_header(struct AVFormatContext *s)
if(totlen == 0) if(totlen == 0)
return 0; return 0;
put_be32(&s->pb, MKBETAG('I', 'D', '3', 0x04)); /* ID3v2.4 */ put_be32(s->pb, MKBETAG('I', 'D', '3', 0x04)); /* ID3v2.4 */
put_byte(&s->pb, 0); put_byte(s->pb, 0);
put_byte(&s->pb, 0); /* flags */ put_byte(s->pb, 0); /* flags */
id3v2_put_size(s, totlen); id3v2_put_size(s, totlen);
@ -622,8 +622,8 @@ static int mp3_write_header(struct AVFormatContext *s)
static int mp3_write_packet(struct AVFormatContext *s, AVPacket *pkt) static int mp3_write_packet(struct AVFormatContext *s, AVPacket *pkt)
{ {
put_buffer(&s->pb, pkt->data, pkt->size); put_buffer(s->pb, pkt->data, pkt->size);
put_flush_packet(&s->pb); put_flush_packet(s->pb);
return 0; return 0;
} }
@ -634,8 +634,8 @@ static int mp3_write_trailer(struct AVFormatContext *s)
/* write the id3v1 tag */ /* write the id3v1 tag */
if (s->title[0] != '\0') { if (s->title[0] != '\0') {
id3v1_create_tag(s, buf); id3v1_create_tag(s, buf);
put_buffer(&s->pb, buf, ID3v1_TAG_SIZE); put_buffer(s->pb, buf, ID3v1_TAG_SIZE);
put_flush_packet(&s->pb); put_flush_packet(s->pb);
} }
return 0; return 0;
} }

View File

@ -55,31 +55,31 @@ static int mpc_read_header(AVFormatContext *s, AVFormatParameters *ap)
AVStream *st; AVStream *st;
int t; int t;
t = get_le24(&s->pb); t = get_le24(s->pb);
if(t != MKTAG('M', 'P', '+', 0)){ if(t != MKTAG('M', 'P', '+', 0)){
if(t != MKTAG('I', 'D', '3', 0)){ if(t != MKTAG('I', 'D', '3', 0)){
av_log(s, AV_LOG_ERROR, "Not a Musepack file\n"); av_log(s, AV_LOG_ERROR, "Not a Musepack file\n");
return -1; return -1;
} }
/* skip ID3 tags and try again */ /* skip ID3 tags and try again */
url_fskip(&s->pb, 3); url_fskip(s->pb, 3);
t = get_byte(&s->pb) << 21; t = get_byte(s->pb) << 21;
t |= get_byte(&s->pb) << 14; t |= get_byte(s->pb) << 14;
t |= get_byte(&s->pb) << 7; t |= get_byte(s->pb) << 7;
t |= get_byte(&s->pb); t |= get_byte(s->pb);
av_log(s, AV_LOG_DEBUG, "Skipping %d(%X) bytes of ID3 data\n", t, t); av_log(s, AV_LOG_DEBUG, "Skipping %d(%X) bytes of ID3 data\n", t, t);
url_fskip(&s->pb, t); url_fskip(s->pb, t);
if(get_le24(&s->pb) != MKTAG('M', 'P', '+', 0)){ if(get_le24(s->pb) != MKTAG('M', 'P', '+', 0)){
av_log(s, AV_LOG_ERROR, "Not a Musepack file\n"); av_log(s, AV_LOG_ERROR, "Not a Musepack file\n");
return -1; return -1;
} }
} }
c->ver = get_byte(&s->pb); c->ver = get_byte(s->pb);
if(c->ver != 0x07 && c->ver != 0x17){ if(c->ver != 0x07 && c->ver != 0x17){
av_log(s, AV_LOG_ERROR, "Can demux Musepack SV7, got version %02X\n", c->ver); av_log(s, AV_LOG_ERROR, "Can demux Musepack SV7, got version %02X\n", c->ver);
return -1; return -1;
} }
c->fcount = get_le32(&s->pb); c->fcount = get_le32(s->pb);
if((int64_t)c->fcount * sizeof(MPCFrame) >= UINT_MAX){ if((int64_t)c->fcount * sizeof(MPCFrame) >= UINT_MAX){
av_log(s, AV_LOG_ERROR, "Too many frames, seeking is not possible\n"); av_log(s, AV_LOG_ERROR, "Too many frames, seeking is not possible\n");
return -1; return -1;
@ -100,7 +100,7 @@ static int mpc_read_header(AVFormatContext *s, AVFormatParameters *ap)
st->codec->extradata_size = 16; st->codec->extradata_size = 16;
st->codec->extradata = av_mallocz(st->codec->extradata_size+FF_INPUT_BUFFER_PADDING_SIZE); st->codec->extradata = av_mallocz(st->codec->extradata_size+FF_INPUT_BUFFER_PADDING_SIZE);
get_buffer(&s->pb, st->codec->extradata, 16); get_buffer(s->pb, st->codec->extradata, 16);
st->codec->sample_rate = mpc_rate[st->codec->extradata[2] & 3]; st->codec->sample_rate = mpc_rate[st->codec->extradata[2] & 3];
av_set_pts_info(st, 32, MPC_FRAMESIZE, st->codec->sample_rate); av_set_pts_info(st, 32, MPC_FRAMESIZE, st->codec->sample_rate);
/* scan for seekpoints */ /* scan for seekpoints */
@ -120,22 +120,22 @@ static int mpc_read_packet(AVFormatContext *s, AVPacket *pkt)
return -1; return -1;
if(c->curframe != c->lastframe + 1){ if(c->curframe != c->lastframe + 1){
url_fseek(&s->pb, c->frames[c->curframe].pos, SEEK_SET); url_fseek(s->pb, c->frames[c->curframe].pos, SEEK_SET);
c->curbits = c->frames[c->curframe].skip; c->curbits = c->frames[c->curframe].skip;
} }
c->lastframe = c->curframe; c->lastframe = c->curframe;
c->curframe++; c->curframe++;
curbits = c->curbits; curbits = c->curbits;
pos = url_ftell(&s->pb); pos = url_ftell(s->pb);
tmp = get_le32(&s->pb); tmp = get_le32(s->pb);
if(curbits <= 12){ if(curbits <= 12){
size2 = (tmp >> (12 - curbits)) & 0xFFFFF; size2 = (tmp >> (12 - curbits)) & 0xFFFFF;
}else{ }else{
tmp = (tmp << 32) | get_le32(&s->pb); tmp = (tmp << 32) | get_le32(s->pb);
size2 = (tmp >> (44 - curbits)) & 0xFFFFF; size2 = (tmp >> (44 - curbits)) & 0xFFFFF;
} }
curbits += 20; curbits += 20;
url_fseek(&s->pb, pos, SEEK_SET); url_fseek(s->pb, pos, SEEK_SET);
size = ((size2 + curbits + 31) & ~31) >> 3; size = ((size2 + curbits + 31) & ~31) >> 3;
if(cur == c->frames_noted){ if(cur == c->frames_noted){
@ -155,9 +155,9 @@ static int mpc_read_packet(AVFormatContext *s, AVPacket *pkt)
pkt->stream_index = 0; pkt->stream_index = 0;
pkt->pts = cur; pkt->pts = cur;
ret = get_buffer(&s->pb, pkt->data + 4, size); ret = get_buffer(s->pb, pkt->data + 4, size);
if(c->curbits) if(c->curbits)
url_fseek(&s->pb, -4, SEEK_CUR); url_fseek(s->pb, -4, SEEK_CUR);
if(ret < size){ if(ret < size){
av_free_packet(pkt); av_free_packet(pkt);
return AVERROR(EIO); return AVERROR(EIO);

View File

@ -90,15 +90,15 @@ static void mpc8_parse_seektable(AVFormatContext *s, int64_t off)
int i, t, seekd; int i, t, seekd;
GetBitContext gb; GetBitContext gb;
url_fseek(&s->pb, off, SEEK_SET); url_fseek(s->pb, off, SEEK_SET);
mpc8_get_chunk_header(&s->pb, &tag, &size); mpc8_get_chunk_header(s->pb, &tag, &size);
if(tag != TAG_SEEKTABLE){ if(tag != TAG_SEEKTABLE){
av_log(s, AV_LOG_ERROR, "No seek table at given position\n"); av_log(s, AV_LOG_ERROR, "No seek table at given position\n");
return; return;
} }
if(!(buf = av_malloc(size))) if(!(buf = av_malloc(size)))
return; return;
get_buffer(&s->pb, buf, size); get_buffer(s->pb, buf, size);
init_get_bits(&gb, buf, size * 8); init_get_bits(&gb, buf, size * 8);
size = gb_get_v(&gb); size = gb_get_v(&gb);
if(size > UINT_MAX/4 || size > c->samples/1152){ if(size > UINT_MAX/4 || size > c->samples/1152){
@ -126,7 +126,7 @@ static void mpc8_parse_seektable(AVFormatContext *s, int64_t off)
static void mpc8_handle_chunk(AVFormatContext *s, int tag, int64_t chunk_pos, int64_t size) static void mpc8_handle_chunk(AVFormatContext *s, int tag, int64_t chunk_pos, int64_t size)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int64_t pos, off; int64_t pos, off;
switch(tag){ switch(tag){
@ -144,7 +144,7 @@ static void mpc8_handle_chunk(AVFormatContext *s, int tag, int64_t chunk_pos, in
static int mpc8_read_header(AVFormatContext *s, AVFormatParameters *ap) static int mpc8_read_header(AVFormatContext *s, AVFormatParameters *ap)
{ {
MPCContext *c = s->priv_data; MPCContext *c = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream *st; AVStream *st;
int tag = 0; int tag = 0;
int64_t size, pos; int64_t size, pos;
@ -202,11 +202,11 @@ static int mpc8_read_packet(AVFormatContext *s, AVPacket *pkt)
int tag; int tag;
int64_t pos, size; int64_t pos, size;
while(!url_feof(&s->pb)){ while(!url_feof(s->pb)){
pos = url_ftell(&s->pb); pos = url_ftell(s->pb);
mpc8_get_chunk_header(&s->pb, &tag, &size); mpc8_get_chunk_header(s->pb, &tag, &size);
if(tag == TAG_AUDIOPACKET){ if(tag == TAG_AUDIOPACKET){
if(av_get_packet(&s->pb, pkt, size) < 0) if(av_get_packet(s->pb, pkt, size) < 0)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
pkt->stream_index = 0; pkt->stream_index = 0;
pkt->pts = c->frame; pkt->pts = c->frame;
@ -226,7 +226,7 @@ static int mpc8_read_seek(AVFormatContext *s, int stream_index, int64_t timestam
int index = av_index_search_timestamp(st, timestamp, flags); int index = av_index_search_timestamp(st, timestamp, flags);
if(index < 0) return -1; if(index < 0) return -1;
url_fseek(&s->pb, st->index_entries[index].pos, SEEK_SET); url_fseek(s->pb, st->index_entries[index].pos, SEEK_SET);
c->frame = st->index_entries[index].timestamp; c->frame = st->index_entries[index].timestamp;
return 0; return 0;
} }

View File

@ -122,7 +122,7 @@ static int mpegps_read_header(AVFormatContext *s,
m->sofdec = -1; m->sofdec = -1;
do { do {
v = get_byte(&s->pb); v = get_byte(s->pb);
m->header_state = m->header_state << 8 | v; m->header_state = m->header_state << 8 | v;
m->sofdec++; m->sofdec++;
} while (v == sofdec[i] && i++ < 6); } while (v == sofdec[i] && i++ < 6);
@ -253,17 +253,17 @@ static int mpegps_read_pes_header(AVFormatContext *s,
int len, size, startcode, c, flags, header_len; int len, size, startcode, c, flags, header_len;
int pes_ext, ext2_len, id_ext, skip; int pes_ext, ext2_len, id_ext, skip;
int64_t pts, dts; int64_t pts, dts;
int64_t last_sync= url_ftell(&s->pb); int64_t last_sync= url_ftell(s->pb);
error_redo: error_redo:
url_fseek(&s->pb, last_sync, SEEK_SET); url_fseek(s->pb, last_sync, SEEK_SET);
redo: redo:
/* next start code (should be immediately after) */ /* next start code (should be immediately after) */
m->header_state = 0xff; m->header_state = 0xff;
size = MAX_SYNC_SIZE; size = MAX_SYNC_SIZE;
startcode = find_next_start_code(&s->pb, &size, &m->header_state); startcode = find_next_start_code(s->pb, &size, &m->header_state);
last_sync = url_ftell(&s->pb); last_sync = url_ftell(s->pb);
//printf("startcode=%x pos=0x%"PRIx64"\n", startcode, url_ftell(&s->pb)); //printf("startcode=%x pos=0x%"PRIx64"\n", startcode, url_ftell(s->pb));
if (startcode < 0) if (startcode < 0)
return AVERROR(EIO); return AVERROR(EIO);
if (startcode == PACK_START_CODE) if (startcode == PACK_START_CODE)
@ -271,16 +271,16 @@ static int mpegps_read_pes_header(AVFormatContext *s,
if (startcode == SYSTEM_HEADER_START_CODE) if (startcode == SYSTEM_HEADER_START_CODE)
goto redo; goto redo;
if (startcode == PADDING_STREAM) { if (startcode == PADDING_STREAM) {
url_fskip(&s->pb, get_be16(&s->pb)); url_fskip(s->pb, get_be16(s->pb));
goto redo; goto redo;
} }
if (startcode == PRIVATE_STREAM_2) { if (startcode == PRIVATE_STREAM_2) {
len = get_be16(&s->pb); len = get_be16(s->pb);
if (!m->sofdec) { if (!m->sofdec) {
while (len-- >= 6) { while (len-- >= 6) {
if (get_byte(&s->pb) == 'S') { if (get_byte(s->pb) == 'S') {
uint8_t buf[5]; uint8_t buf[5];
get_buffer(&s->pb, buf, sizeof(buf)); get_buffer(s->pb, buf, sizeof(buf));
m->sofdec = !memcmp(buf, "ofdec", 5); m->sofdec = !memcmp(buf, "ofdec", 5);
len -= sizeof(buf); len -= sizeof(buf);
break; break;
@ -288,11 +288,11 @@ static int mpegps_read_pes_header(AVFormatContext *s,
} }
m->sofdec -= !m->sofdec; m->sofdec -= !m->sofdec;
} }
url_fskip(&s->pb, len); url_fskip(s->pb, len);
goto redo; goto redo;
} }
if (startcode == PROGRAM_STREAM_MAP) { if (startcode == PROGRAM_STREAM_MAP) {
mpegps_psm_parse(m, &s->pb); mpegps_psm_parse(m, s->pb);
goto redo; goto redo;
} }
@ -302,16 +302,16 @@ static int mpegps_read_pes_header(AVFormatContext *s,
(startcode == 0x1bd) || (startcode == 0x1fd))) (startcode == 0x1bd) || (startcode == 0x1fd)))
goto redo; goto redo;
if (ppos) { if (ppos) {
*ppos = url_ftell(&s->pb) - 4; *ppos = url_ftell(s->pb) - 4;
} }
len = get_be16(&s->pb); len = get_be16(s->pb);
pts = pts =
dts = AV_NOPTS_VALUE; dts = AV_NOPTS_VALUE;
/* stuffing */ /* stuffing */
for(;;) { for(;;) {
if (len < 1) if (len < 1)
goto error_redo; goto error_redo;
c = get_byte(&s->pb); c = get_byte(s->pb);
len--; len--;
/* XXX: for mpeg1, should test only bit 7 */ /* XXX: for mpeg1, should test only bit 7 */
if (c != 0xff) if (c != 0xff)
@ -319,15 +319,15 @@ static int mpegps_read_pes_header(AVFormatContext *s,
} }
if ((c & 0xc0) == 0x40) { if ((c & 0xc0) == 0x40) {
/* buffer scale & size */ /* buffer scale & size */
get_byte(&s->pb); get_byte(s->pb);
c = get_byte(&s->pb); c = get_byte(s->pb);
len -= 2; len -= 2;
} }
if ((c & 0xe0) == 0x20) { if ((c & 0xe0) == 0x20) {
dts = pts = get_pts(&s->pb, c); dts = pts = get_pts(s->pb, c);
len -= 4; len -= 4;
if (c & 0x10){ if (c & 0x10){
dts = get_pts(&s->pb, -1); dts = get_pts(s->pb, -1);
len -= 5; len -= 5;
} }
} else if ((c & 0xc0) == 0x80) { } else if ((c & 0xc0) == 0x80) {
@ -338,22 +338,22 @@ static int mpegps_read_pes_header(AVFormatContext *s,
goto redo; goto redo;
} }
#endif #endif
flags = get_byte(&s->pb); flags = get_byte(s->pb);
header_len = get_byte(&s->pb); header_len = get_byte(s->pb);
len -= 2; len -= 2;
if (header_len > len) if (header_len > len)
goto error_redo; goto error_redo;
len -= header_len; len -= header_len;
if (flags & 0x80) { if (flags & 0x80) {
dts = pts = get_pts(&s->pb, -1); dts = pts = get_pts(s->pb, -1);
header_len -= 5; header_len -= 5;
if (flags & 0x40) { if (flags & 0x40) {
dts = get_pts(&s->pb, -1); dts = get_pts(s->pb, -1);
header_len -= 5; header_len -= 5;
} }
} }
if (flags & 0x01) { /* PES extension */ if (flags & 0x01) { /* PES extension */
pes_ext = get_byte(&s->pb); pes_ext = get_byte(s->pb);
header_len--; header_len--;
if (pes_ext & 0x40) { /* pack header - should be zero in PS */ if (pes_ext & 0x40) { /* pack header - should be zero in PS */
goto error_redo; goto error_redo;
@ -361,14 +361,14 @@ static int mpegps_read_pes_header(AVFormatContext *s,
/* Skip PES private data, program packet sequence counter and P-STD buffer */ /* Skip PES private data, program packet sequence counter and P-STD buffer */
skip = (pes_ext >> 4) & 0xb; skip = (pes_ext >> 4) & 0xb;
skip += skip & 0x9; skip += skip & 0x9;
url_fskip(&s->pb, skip); url_fskip(s->pb, skip);
header_len -= skip; header_len -= skip;
if (pes_ext & 0x01) { /* PES extension 2 */ if (pes_ext & 0x01) { /* PES extension 2 */
ext2_len = get_byte(&s->pb); ext2_len = get_byte(s->pb);
header_len--; header_len--;
if ((ext2_len & 0x7f) > 0) { if ((ext2_len & 0x7f) > 0) {
id_ext = get_byte(&s->pb); id_ext = get_byte(s->pb);
if ((id_ext & 0x80) == 0) if ((id_ext & 0x80) == 0)
startcode = ((startcode & 0xff) << 8) | id_ext; startcode = ((startcode & 0xff) << 8) | id_ext;
header_len--; header_len--;
@ -377,23 +377,23 @@ static int mpegps_read_pes_header(AVFormatContext *s,
} }
if(header_len < 0) if(header_len < 0)
goto error_redo; goto error_redo;
url_fskip(&s->pb, header_len); url_fskip(s->pb, header_len);
} }
else if( c!= 0xf ) else if( c!= 0xf )
goto redo; goto redo;
if (startcode == PRIVATE_STREAM_1 && !m->psm_es_type[startcode & 0xff]) { if (startcode == PRIVATE_STREAM_1 && !m->psm_es_type[startcode & 0xff]) {
startcode = get_byte(&s->pb); startcode = get_byte(s->pb);
len--; len--;
if (startcode >= 0x80 && startcode <= 0xcf) { if (startcode >= 0x80 && startcode <= 0xcf) {
/* audio: skip header */ /* audio: skip header */
get_byte(&s->pb); get_byte(s->pb);
get_byte(&s->pb); get_byte(s->pb);
get_byte(&s->pb); get_byte(s->pb);
len -= 3; len -= 3;
if (startcode >= 0xb0 && startcode <= 0xbf) { if (startcode >= 0xb0 && startcode <= 0xbf) {
/* MLP/TrueHD audio has a 4-byte header */ /* MLP/TrueHD audio has a 4-byte header */
get_byte(&s->pb); get_byte(s->pb);
len--; len--;
} }
} }
@ -465,8 +465,8 @@ static int mpegps_read_packet(AVFormatContext *s,
} else if (startcode >= 0x1e0 && startcode <= 0x1ef) { } else if (startcode >= 0x1e0 && startcode <= 0x1ef) {
static const unsigned char avs_seqh[4] = { 0, 0, 1, 0xb0 }; static const unsigned char avs_seqh[4] = { 0, 0, 1, 0xb0 };
unsigned char buf[8]; unsigned char buf[8];
get_buffer(&s->pb, buf, 8); get_buffer(s->pb, buf, 8);
url_fseek(&s->pb, -8, SEEK_CUR); url_fseek(s->pb, -8, SEEK_CUR);
if(!memcmp(buf, avs_seqh, 4) && (buf[6] != 0 || buf[7] != 1)) if(!memcmp(buf, avs_seqh, 4) && (buf[6] != 0 || buf[7] != 1))
codec_id = CODEC_ID_CAVS; codec_id = CODEC_ID_CAVS;
else else
@ -502,7 +502,7 @@ static int mpegps_read_packet(AVFormatContext *s,
} else { } else {
skip: skip:
/* skip packet */ /* skip packet */
url_fskip(&s->pb, len); url_fskip(s->pb, len);
goto redo; goto redo;
} }
/* no stream found: add a new stream */ /* no stream found: add a new stream */
@ -523,9 +523,9 @@ static int mpegps_read_packet(AVFormatContext *s,
audio data */ audio data */
if (len <= 3) if (len <= 3)
goto skip; goto skip;
get_byte(&s->pb); /* emphasis (1), muse(1), reserved(1), frame number(5) */ get_byte(s->pb); /* emphasis (1), muse(1), reserved(1), frame number(5) */
b1 = get_byte(&s->pb); /* quant (2), freq(2), reserved(1), channels(3) */ b1 = get_byte(s->pb); /* quant (2), freq(2), reserved(1), channels(3) */
get_byte(&s->pb); /* dynamic range control (0x80 = off) */ get_byte(s->pb); /* dynamic range control (0x80 = off) */
len -= 3; len -= 3;
freq = (b1 >> 4) & 3; freq = (b1 >> 4) & 3;
st->codec->sample_rate = lpcm_freq_tab[freq]; st->codec->sample_rate = lpcm_freq_tab[freq];
@ -533,7 +533,7 @@ static int mpegps_read_packet(AVFormatContext *s,
st->codec->bit_rate = st->codec->channels * st->codec->sample_rate * 2; st->codec->bit_rate = st->codec->channels * st->codec->sample_rate * 2;
} }
av_new_packet(pkt, len); av_new_packet(pkt, len);
get_buffer(&s->pb, pkt->data, pkt->size); get_buffer(s->pb, pkt->data, pkt->size);
pkt->pts = pts; pkt->pts = pts;
pkt->dts = dts; pkt->dts = dts;
pkt->stream_index = st->index; pkt->stream_index = st->index;
@ -560,7 +560,7 @@ static int64_t mpegps_read_dts(AVFormatContext *s, int stream_index,
#ifdef DEBUG_SEEK #ifdef DEBUG_SEEK
printf("read_dts: pos=0x%"PRIx64" next=%d -> ", pos, find_next); printf("read_dts: pos=0x%"PRIx64" next=%d -> ", pos, find_next);
#endif #endif
url_fseek(&s->pb, pos, SEEK_SET); url_fseek(s->pb, pos, SEEK_SET);
for(;;) { for(;;) {
len = mpegps_read_pes_header(s, &pos, &startcode, &pts, &dts); len = mpegps_read_pes_header(s, &pos, &startcode, &pts, &dts);
if (len < 0) { if (len < 0) {
@ -573,7 +573,7 @@ static int64_t mpegps_read_dts(AVFormatContext *s, int stream_index,
dts != AV_NOPTS_VALUE) { dts != AV_NOPTS_VALUE) {
break; break;
} }
url_fskip(&s->pb, len); url_fskip(s->pb, len);
} }
#ifdef DEBUG_SEEK #ifdef DEBUG_SEEK
printf("pos=0x%"PRIx64" dts=0x%"PRIx64" %0.3f\n", pos, dts, dts / 90000.0); printf("pos=0x%"PRIx64" dts=0x%"PRIx64" %0.3f\n", pos, dts, dts / 90000.0);

View File

@ -690,19 +690,19 @@ static int flush_packet(AVFormatContext *ctx, int stream_index,
size = put_system_header(ctx, buf_ptr, 0); size = put_system_header(ctx, buf_ptr, 0);
buf_ptr += size; buf_ptr += size;
size = buf_ptr - buffer; size = buf_ptr - buffer;
put_buffer(&ctx->pb, buffer, size); put_buffer(ctx->pb, buffer, size);
put_be32(&ctx->pb, PRIVATE_STREAM_2); put_be32(ctx->pb, PRIVATE_STREAM_2);
put_be16(&ctx->pb, 0x03d4); // length put_be16(ctx->pb, 0x03d4); // length
put_byte(&ctx->pb, 0x00); // substream ID, 00=PCI put_byte(ctx->pb, 0x00); // substream ID, 00=PCI
for (i = 0; i < 979; i++) for (i = 0; i < 979; i++)
put_byte(&ctx->pb, 0x00); put_byte(ctx->pb, 0x00);
put_be32(&ctx->pb, PRIVATE_STREAM_2); put_be32(ctx->pb, PRIVATE_STREAM_2);
put_be16(&ctx->pb, 0x03fa); // length put_be16(ctx->pb, 0x03fa); // length
put_byte(&ctx->pb, 0x01); // substream ID, 01=DSI put_byte(ctx->pb, 0x01); // substream ID, 01=DSI
for (i = 0; i < 1017; i++) for (i = 0; i < 1017; i++)
put_byte(&ctx->pb, 0x00); put_byte(ctx->pb, 0x00);
memset(buffer, 0, 128); memset(buffer, 0, 128);
buf_ptr = buffer; buf_ptr = buffer;
@ -725,7 +725,7 @@ static int flush_packet(AVFormatContext *ctx, int stream_index,
} }
} }
size = buf_ptr - buffer; size = buf_ptr - buffer;
put_buffer(&ctx->pb, buffer, size); put_buffer(ctx->pb, buffer, size);
packet_size = s->packet_size - size; packet_size = s->packet_size - size;
@ -830,16 +830,16 @@ static int flush_packet(AVFormatContext *ctx, int stream_index,
nb_frames= get_nb_frames(ctx, stream, payload_size - stuffing_size); nb_frames= get_nb_frames(ctx, stream, payload_size - stuffing_size);
put_be32(&ctx->pb, startcode); put_be32(ctx->pb, startcode);
put_be16(&ctx->pb, packet_size); put_be16(ctx->pb, packet_size);
if (!s->is_mpeg2) if (!s->is_mpeg2)
for(i=0;i<stuffing_size;i++) for(i=0;i<stuffing_size;i++)
put_byte(&ctx->pb, 0xff); put_byte(ctx->pb, 0xff);
if (s->is_mpeg2) { if (s->is_mpeg2) {
put_byte(&ctx->pb, 0x80); /* mpeg2 id */ put_byte(ctx->pb, 0x80); /* mpeg2 id */
pes_flags=0; pes_flags=0;
@ -856,64 +856,64 @@ static int flush_packet(AVFormatContext *ctx, int stream_index,
if (stream->packet_number == 0) if (stream->packet_number == 0)
pes_flags |= 0x01; pes_flags |= 0x01;
put_byte(&ctx->pb, pes_flags); /* flags */ put_byte(ctx->pb, pes_flags); /* flags */
put_byte(&ctx->pb, header_len - 3 + stuffing_size); put_byte(ctx->pb, header_len - 3 + stuffing_size);
if (pes_flags & 0x80) /*write pts*/ if (pes_flags & 0x80) /*write pts*/
put_timestamp(&ctx->pb, (pes_flags & 0x40) ? 0x03 : 0x02, pts); put_timestamp(ctx->pb, (pes_flags & 0x40) ? 0x03 : 0x02, pts);
if (pes_flags & 0x40) /*write dts*/ if (pes_flags & 0x40) /*write dts*/
put_timestamp(&ctx->pb, 0x01, dts); put_timestamp(ctx->pb, 0x01, dts);
if (pes_flags & 0x01) { /*write pes extension*/ if (pes_flags & 0x01) { /*write pes extension*/
put_byte(&ctx->pb, 0x10); /* flags */ put_byte(ctx->pb, 0x10); /* flags */
/* P-STD buffer info */ /* P-STD buffer info */
if (id == AUDIO_ID) if (id == AUDIO_ID)
put_be16(&ctx->pb, 0x4000 | stream->max_buffer_size/128); put_be16(ctx->pb, 0x4000 | stream->max_buffer_size/128);
else else
put_be16(&ctx->pb, 0x6000 | stream->max_buffer_size/1024); put_be16(ctx->pb, 0x6000 | stream->max_buffer_size/1024);
} }
} else { } else {
if (pts != AV_NOPTS_VALUE) { if (pts != AV_NOPTS_VALUE) {
if (dts != pts) { if (dts != pts) {
put_timestamp(&ctx->pb, 0x03, pts); put_timestamp(ctx->pb, 0x03, pts);
put_timestamp(&ctx->pb, 0x01, dts); put_timestamp(ctx->pb, 0x01, dts);
} else { } else {
put_timestamp(&ctx->pb, 0x02, pts); put_timestamp(ctx->pb, 0x02, pts);
} }
} else { } else {
put_byte(&ctx->pb, 0x0f); put_byte(ctx->pb, 0x0f);
} }
} }
if (s->is_mpeg2) { if (s->is_mpeg2) {
/* special stuffing byte that is always written /* special stuffing byte that is always written
to prevent accidental generation of start codes. */ to prevent accidental generation of start codes. */
put_byte(&ctx->pb, 0xff); put_byte(ctx->pb, 0xff);
for(i=0;i<stuffing_size;i++) for(i=0;i<stuffing_size;i++)
put_byte(&ctx->pb, 0xff); put_byte(ctx->pb, 0xff);
} }
if (startcode == PRIVATE_STREAM_1) { if (startcode == PRIVATE_STREAM_1) {
put_byte(&ctx->pb, id); put_byte(ctx->pb, id);
if (id >= 0xa0) { if (id >= 0xa0) {
/* LPCM (XXX: check nb_frames) */ /* LPCM (XXX: check nb_frames) */
put_byte(&ctx->pb, 7); put_byte(ctx->pb, 7);
put_be16(&ctx->pb, 4); /* skip 3 header bytes */ put_be16(ctx->pb, 4); /* skip 3 header bytes */
put_byte(&ctx->pb, stream->lpcm_header[0]); put_byte(ctx->pb, stream->lpcm_header[0]);
put_byte(&ctx->pb, stream->lpcm_header[1]); put_byte(ctx->pb, stream->lpcm_header[1]);
put_byte(&ctx->pb, stream->lpcm_header[2]); put_byte(ctx->pb, stream->lpcm_header[2]);
} else if (id >= 0x40) { } else if (id >= 0x40) {
/* AC3 */ /* AC3 */
put_byte(&ctx->pb, nb_frames); put_byte(ctx->pb, nb_frames);
put_be16(&ctx->pb, trailer_size+1); put_be16(ctx->pb, trailer_size+1);
} }
} }
/* output data */ /* output data */
if(av_fifo_generic_read(&stream->fifo, payload_size - stuffing_size, &put_buffer, &ctx->pb) < 0) if(av_fifo_generic_read(&stream->fifo, payload_size - stuffing_size, &put_buffer, ctx->pb) < 0)
return -1; return -1;
stream->bytes_to_iframe -= payload_size - stuffing_size; stream->bytes_to_iframe -= payload_size - stuffing_size;
}else{ }else{
@ -922,12 +922,12 @@ static int flush_packet(AVFormatContext *ctx, int stream_index,
} }
if (pad_packet_bytes > 0) if (pad_packet_bytes > 0)
put_padding_packet(ctx,&ctx->pb, pad_packet_bytes); put_padding_packet(ctx,ctx->pb, pad_packet_bytes);
for(i=0;i<zero_trail_bytes;i++) for(i=0;i<zero_trail_bytes;i++)
put_byte(&ctx->pb, 0x00); put_byte(ctx->pb, 0x00);
put_flush_packet(&ctx->pb); put_flush_packet(ctx->pb);
s->packet_number++; s->packet_number++;
@ -952,11 +952,11 @@ static void put_vcd_padding_sector(AVFormatContext *ctx)
int i; int i;
for(i=0;i<s->packet_size;i++) for(i=0;i<s->packet_size;i++)
put_byte(&ctx->pb, 0); put_byte(ctx->pb, 0);
s->vcd_padding_bytes_written += s->packet_size; s->vcd_padding_bytes_written += s->packet_size;
put_flush_packet(&ctx->pb); put_flush_packet(ctx->pb);
/* increasing the packet number is correct. The SCR of the following packs /* increasing the packet number is correct. The SCR of the following packs
is calculated from the packet_number and it has to include the padding is calculated from the packet_number and it has to include the padding
@ -1206,8 +1206,8 @@ static int mpeg_mux_end(AVFormatContext *ctx)
/* End header according to MPEG1 systems standard. We do not write /* End header according to MPEG1 systems standard. We do not write
it as it is usually not needed by decoders and because it it as it is usually not needed by decoders and because it
complicates MPEG stream concatenation. */ complicates MPEG stream concatenation. */
//put_be32(&ctx->pb, ISO_11172_END_CODE); //put_be32(ctx->pb, ISO_11172_END_CODE);
//put_flush_packet(&ctx->pb); //put_flush_packet(ctx->pb);
for(i=0;i<ctx->nb_streams;i++) { for(i=0;i<ctx->nb_streams;i++) {
stream = ctx->streams[i]->priv_data; stream = ctx->streams[i]->priv_data;

View File

@ -1098,7 +1098,7 @@ static int read_packet(ByteIOContext *pb, uint8_t *buf, int raw_packet_size)
static int handle_packets(MpegTSContext *ts, int nb_packets) static int handle_packets(MpegTSContext *ts, int nb_packets)
{ {
AVFormatContext *s = ts->stream; AVFormatContext *s = ts->stream;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
uint8_t packet[TS_PACKET_SIZE]; uint8_t packet[TS_PACKET_SIZE];
int packet_num, ret; int packet_num, ret;
@ -1180,7 +1180,7 @@ static int mpegts_read_header(AVFormatContext *s,
AVFormatParameters *ap) AVFormatParameters *ap)
{ {
MpegTSContext *ts = s->priv_data; MpegTSContext *ts = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
uint8_t buf[1024]; uint8_t buf[1024];
int len; int len;
int64_t pos; int64_t pos;
@ -1243,7 +1243,7 @@ static int mpegts_read_header(AVFormatContext *s,
nb_pcrs = 0; nb_pcrs = 0;
nb_packets = 0; nb_packets = 0;
for(;;) { for(;;) {
ret = read_packet(&s->pb, packet, ts->raw_packet_size); ret = read_packet(s->pb, packet, ts->raw_packet_size);
if (ret < 0) if (ret < 0)
return -1; return -1;
pid = AV_RB16(packet + 1) & 0x1fff; pid = AV_RB16(packet + 1) & 0x1fff;
@ -1291,8 +1291,8 @@ static int mpegts_raw_read_packet(AVFormatContext *s,
if (av_new_packet(pkt, TS_PACKET_SIZE) < 0) if (av_new_packet(pkt, TS_PACKET_SIZE) < 0)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
pkt->pos= url_ftell(&s->pb); pkt->pos= url_ftell(s->pb);
ret = read_packet(&s->pb, pkt->data, ts->raw_packet_size); ret = read_packet(s->pb, pkt->data, ts->raw_packet_size);
if (ret < 0) { if (ret < 0) {
av_free_packet(pkt); av_free_packet(pkt);
return ret; return ret;
@ -1301,10 +1301,10 @@ static int mpegts_raw_read_packet(AVFormatContext *s,
/* compute exact PCR for each packet */ /* compute exact PCR for each packet */
if (parse_pcr(&pcr_h, &pcr_l, pkt->data) == 0) { if (parse_pcr(&pcr_h, &pcr_l, pkt->data) == 0) {
/* we read the next PCR (XXX: optimize it by using a bigger buffer */ /* we read the next PCR (XXX: optimize it by using a bigger buffer */
pos = url_ftell(&s->pb); pos = url_ftell(s->pb);
for(i = 0; i < MAX_PACKET_READAHEAD; i++) { for(i = 0; i < MAX_PACKET_READAHEAD; i++) {
url_fseek(&s->pb, pos + i * ts->raw_packet_size, SEEK_SET); url_fseek(s->pb, pos + i * ts->raw_packet_size, SEEK_SET);
get_buffer(&s->pb, pcr_buf, 12); get_buffer(s->pb, pcr_buf, 12);
if (parse_pcr(&next_pcr_h, &next_pcr_l, pcr_buf) == 0) { if (parse_pcr(&next_pcr_h, &next_pcr_l, pcr_buf) == 0) {
/* XXX: not precise enough */ /* XXX: not precise enough */
ts->pcr_incr = ((next_pcr_h - pcr_h) * 300 + (next_pcr_l - pcr_l)) / ts->pcr_incr = ((next_pcr_h - pcr_h) * 300 + (next_pcr_l - pcr_l)) /
@ -1312,7 +1312,7 @@ static int mpegts_raw_read_packet(AVFormatContext *s,
break; break;
} }
} }
url_fseek(&s->pb, pos, SEEK_SET); url_fseek(s->pb, pos, SEEK_SET);
/* no next PCR found: we use previous increment */ /* no next PCR found: we use previous increment */
ts->cur_pcr = pcr_h * 300 + pcr_l; ts->cur_pcr = pcr_h * 300 + pcr_l;
} }
@ -1354,8 +1354,8 @@ static int64_t mpegts_get_pcr(AVFormatContext *s, int stream_index,
pos = ((*ppos + ts->raw_packet_size - 1) / ts->raw_packet_size) * ts->raw_packet_size; pos = ((*ppos + ts->raw_packet_size - 1) / ts->raw_packet_size) * ts->raw_packet_size;
if (find_next) { if (find_next) {
for(;;) { for(;;) {
url_fseek(&s->pb, pos, SEEK_SET); url_fseek(s->pb, pos, SEEK_SET);
if (get_buffer(&s->pb, buf, TS_PACKET_SIZE) != TS_PACKET_SIZE) if (get_buffer(s->pb, buf, TS_PACKET_SIZE) != TS_PACKET_SIZE)
return AV_NOPTS_VALUE; return AV_NOPTS_VALUE;
if ((pcr_pid < 0 || (AV_RB16(buf + 1) & 0x1fff) == pcr_pid) && if ((pcr_pid < 0 || (AV_RB16(buf + 1) & 0x1fff) == pcr_pid) &&
parse_pcr(&timestamp, &pcr_l, buf) == 0) { parse_pcr(&timestamp, &pcr_l, buf) == 0) {
@ -1368,8 +1368,8 @@ static int64_t mpegts_get_pcr(AVFormatContext *s, int stream_index,
pos -= ts->raw_packet_size; pos -= ts->raw_packet_size;
if (pos < 0) if (pos < 0)
return AV_NOPTS_VALUE; return AV_NOPTS_VALUE;
url_fseek(&s->pb, pos, SEEK_SET); url_fseek(s->pb, pos, SEEK_SET);
if (get_buffer(&s->pb, buf, TS_PACKET_SIZE) != TS_PACKET_SIZE) if (get_buffer(s->pb, buf, TS_PACKET_SIZE) != TS_PACKET_SIZE)
return AV_NOPTS_VALUE; return AV_NOPTS_VALUE;
if ((pcr_pid < 0 || (AV_RB16(buf + 1) & 0x1fff) == pcr_pid) && if ((pcr_pid < 0 || (AV_RB16(buf + 1) & 0x1fff) == pcr_pid) &&
parse_pcr(&timestamp, &pcr_l, buf) == 0) { parse_pcr(&timestamp, &pcr_l, buf) == 0) {
@ -1390,17 +1390,17 @@ static int read_seek(AVFormatContext *s, int stream_index, int64_t target_ts, in
if(av_seek_frame_binary(s, stream_index, target_ts, flags) < 0) if(av_seek_frame_binary(s, stream_index, target_ts, flags) < 0)
return -1; return -1;
pos= url_ftell(&s->pb); pos= url_ftell(s->pb);
for(;;) { for(;;) {
url_fseek(&s->pb, pos, SEEK_SET); url_fseek(s->pb, pos, SEEK_SET);
if (get_buffer(&s->pb, buf, TS_PACKET_SIZE) != TS_PACKET_SIZE) if (get_buffer(s->pb, buf, TS_PACKET_SIZE) != TS_PACKET_SIZE)
return -1; return -1;
// pid = AV_RB16(buf + 1) & 0x1fff; // pid = AV_RB16(buf + 1) & 0x1fff;
if(buf[1] & 0x40) break; if(buf[1] & 0x40) break;
pos += ts->raw_packet_size; pos += ts->raw_packet_size;
} }
url_fseek(&s->pb, pos, SEEK_SET); url_fseek(s->pb, pos, SEEK_SET);
return 0; return 0;
} }

View File

@ -353,7 +353,7 @@ static MpegTSService *mpegts_add_service(MpegTSWrite *ts,
static void section_write_packet(MpegTSSection *s, const uint8_t *packet) static void section_write_packet(MpegTSSection *s, const uint8_t *packet)
{ {
AVFormatContext *ctx = s->opaque; AVFormatContext *ctx = s->opaque;
put_buffer(&ctx->pb, packet, TS_PACKET_SIZE); put_buffer(ctx->pb, packet, TS_PACKET_SIZE);
} }
static int mpegts_write_header(AVFormatContext *s) static int mpegts_write_header(AVFormatContext *s)
@ -431,7 +431,7 @@ static int mpegts_write_header(AVFormatContext *s)
for(i = 0; i < ts->nb_services; i++) { for(i = 0; i < ts->nb_services; i++) {
mpegts_write_pmt(s, ts->services[i]); mpegts_write_pmt(s, ts->services[i]);
} }
put_flush_packet(&s->pb); put_flush_packet(s->pb);
return 0; return 0;
@ -608,9 +608,9 @@ static void mpegts_write_pes(AVFormatContext *s, AVStream *st,
memcpy(buf + TS_PACKET_SIZE - len, payload, len); memcpy(buf + TS_PACKET_SIZE - len, payload, len);
payload += len; payload += len;
payload_size -= len; payload_size -= len;
put_buffer(&s->pb, buf, TS_PACKET_SIZE); put_buffer(s->pb, buf, TS_PACKET_SIZE);
} }
put_flush_packet(&s->pb); put_flush_packet(s->pb);
} }
static int mpegts_write_packet(AVFormatContext *s, AVPacket *pkt) static int mpegts_write_packet(AVFormatContext *s, AVPacket *pkt)
@ -668,7 +668,7 @@ static int mpegts_write_end(AVFormatContext *s)
ts_st->payload_pts, ts_st->payload_dts); ts_st->payload_pts, ts_st->payload_dts);
} }
} }
put_flush_packet(&s->pb); put_flush_packet(s->pb);
for(i = 0; i < ts->nb_services; i++) { for(i = 0; i < ts->nb_services; i++) {
service = ts->services[i]; service = ts->services[i];

View File

@ -29,8 +29,8 @@ static int mpjpeg_write_header(AVFormatContext *s)
uint8_t buf1[256]; uint8_t buf1[256];
snprintf(buf1, sizeof(buf1), "--%s\n", BOUNDARY_TAG); snprintf(buf1, sizeof(buf1), "--%s\n", BOUNDARY_TAG);
put_buffer(&s->pb, buf1, strlen(buf1)); put_buffer(s->pb, buf1, strlen(buf1));
put_flush_packet(&s->pb); put_flush_packet(s->pb);
return 0; return 0;
} }
@ -39,12 +39,12 @@ static int mpjpeg_write_packet(AVFormatContext *s, AVPacket *pkt)
uint8_t buf1[256]; uint8_t buf1[256];
snprintf(buf1, sizeof(buf1), "Content-type: image/jpeg\n\n"); snprintf(buf1, sizeof(buf1), "Content-type: image/jpeg\n\n");
put_buffer(&s->pb, buf1, strlen(buf1)); put_buffer(s->pb, buf1, strlen(buf1));
put_buffer(&s->pb, pkt->data, pkt->size); put_buffer(s->pb, pkt->data, pkt->size);
snprintf(buf1, sizeof(buf1), "\n--%s\n", BOUNDARY_TAG); snprintf(buf1, sizeof(buf1), "\n--%s\n", BOUNDARY_TAG);
put_buffer(&s->pb, buf1, strlen(buf1)); put_buffer(s->pb, buf1, strlen(buf1));
put_flush_packet(&s->pb); put_flush_packet(s->pb);
return 0; return 0;
} }

View File

@ -65,7 +65,7 @@ static int mtv_probe(AVProbeData *p)
static int mtv_read_header(AVFormatContext *s, AVFormatParameters *ap) static int mtv_read_header(AVFormatContext *s, AVFormatParameters *ap)
{ {
MTVDemuxContext *mtv = s->priv_data; MTVDemuxContext *mtv = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream *st; AVStream *st;
@ -131,7 +131,7 @@ static int mtv_read_header(AVFormatContext *s, AVFormatParameters *ap)
static int mtv_read_packet(AVFormatContext *s, AVPacket *pkt) static int mtv_read_packet(AVFormatContext *s, AVPacket *pkt)
{ {
MTVDemuxContext *mtv = s->priv_data; MTVDemuxContext *mtv = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int ret; int ret;
#ifndef WORDS_BIGENDIAN #ifndef WORDS_BIGENDIAN
int i; int i;

View File

@ -269,7 +269,7 @@ static int mxf_decrypt_triplet(AVFormatContext *s, AVPacket *pkt, KLVPacket *klv
{ {
static const uint8_t checkv[16] = {0x43, 0x48, 0x55, 0x4b, 0x43, 0x48, 0x55, 0x4b, 0x43, 0x48, 0x55, 0x4b, 0x43, 0x48, 0x55, 0x4b}; static const uint8_t checkv[16] = {0x43, 0x48, 0x55, 0x4b, 0x43, 0x48, 0x55, 0x4b, 0x43, 0x48, 0x55, 0x4b, 0x43, 0x48, 0x55, 0x4b};
MXFContext *mxf = s->priv_data; MXFContext *mxf = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
offset_t end = url_ftell(pb) + klv->length; offset_t end = url_ftell(pb) + klv->length;
uint64_t size; uint64_t size;
uint64_t orig_size; uint64_t orig_size;
@ -326,8 +326,8 @@ static int mxf_read_packet(AVFormatContext *s, AVPacket *pkt)
{ {
KLVPacket klv; KLVPacket klv;
while (!url_feof(&s->pb)) { while (!url_feof(s->pb)) {
if (klv_read_packet(&klv, &s->pb) < 0) if (klv_read_packet(&klv, s->pb) < 0)
return -1; return -1;
#ifdef DEBUG #ifdef DEBUG
PRINT_KEY(s, "read packet", klv.key); PRINT_KEY(s, "read packet", klv.key);
@ -344,22 +344,22 @@ static int mxf_read_packet(AVFormatContext *s, AVPacket *pkt)
int index = mxf_get_stream_index(s, &klv); int index = mxf_get_stream_index(s, &klv);
if (index < 0) { if (index < 0) {
av_log(s, AV_LOG_ERROR, "error getting stream index\n"); av_log(s, AV_LOG_ERROR, "error getting stream index\n");
url_fskip(&s->pb, klv.length); url_fskip(s->pb, klv.length);
return -1; return -1;
} }
/* check for 8 channels AES3 element */ /* check for 8 channels AES3 element */
if (klv.key[12] == 0x06 && klv.key[13] == 0x01 && klv.key[14] == 0x10) { if (klv.key[12] == 0x06 && klv.key[13] == 0x01 && klv.key[14] == 0x10) {
if (mxf_get_d10_aes3_packet(&s->pb, s->streams[index], pkt, klv.length) < 0) { if (mxf_get_d10_aes3_packet(s->pb, s->streams[index], pkt, klv.length) < 0) {
av_log(s, AV_LOG_ERROR, "error reading D-10 aes3 frame\n"); av_log(s, AV_LOG_ERROR, "error reading D-10 aes3 frame\n");
return -1; return -1;
} }
} else } else
av_get_packet(&s->pb, pkt, klv.length); av_get_packet(s->pb, pkt, klv.length);
pkt->stream_index = index; pkt->stream_index = index;
pkt->pos = klv.offset; pkt->pos = klv.offset;
return 0; return 0;
} else } else
url_fskip(&s->pb, klv.length); url_fskip(s->pb, klv.length);
} }
return AVERROR(EIO); return AVERROR(EIO);
} }
@ -897,7 +897,7 @@ static const MXFMetadataReadTableEntry mxf_metadata_read_table[] = {
static int mxf_read_local_tags(MXFContext *mxf, KLVPacket *klv, int (*read_child)(), int ctx_size, enum MXFMetadataSetType type) static int mxf_read_local_tags(MXFContext *mxf, KLVPacket *klv, int (*read_child)(), int ctx_size, enum MXFMetadataSetType type)
{ {
ByteIOContext *pb = &mxf->fc->pb; ByteIOContext *pb = mxf->fc->pb;
MXFMetadataSet *ctx = ctx_size ? av_mallocz(ctx_size) : mxf; MXFMetadataSet *ctx = ctx_size ? av_mallocz(ctx_size) : mxf;
uint64_t klv_end= url_ftell(pb) + klv->length; uint64_t klv_end= url_ftell(pb) + klv->length;
@ -926,16 +926,16 @@ static int mxf_read_header(AVFormatContext *s, AVFormatParameters *ap)
MXFContext *mxf = s->priv_data; MXFContext *mxf = s->priv_data;
KLVPacket klv; KLVPacket klv;
if (!mxf_read_sync(&s->pb, mxf_header_partition_pack_key, 14)) { if (!mxf_read_sync(s->pb, mxf_header_partition_pack_key, 14)) {
av_log(s, AV_LOG_ERROR, "could not find header partition pack key\n"); av_log(s, AV_LOG_ERROR, "could not find header partition pack key\n");
return -1; return -1;
} }
url_fseek(&s->pb, -14, SEEK_CUR); url_fseek(s->pb, -14, SEEK_CUR);
mxf->fc = s; mxf->fc = s;
while (!url_feof(&s->pb)) { while (!url_feof(s->pb)) {
const MXFMetadataReadTableEntry *metadata; const MXFMetadataReadTableEntry *metadata;
if (klv_read_packet(&klv, &s->pb) < 0) if (klv_read_packet(&klv, s->pb) < 0)
return -1; return -1;
#ifdef DEBUG #ifdef DEBUG
PRINT_KEY(s, "read header", klv.key); PRINT_KEY(s, "read header", klv.key);
@ -943,7 +943,7 @@ static int mxf_read_header(AVFormatContext *s, AVFormatParameters *ap)
if (IS_KLV_KEY(klv.key, mxf_encrypted_triplet_key) || if (IS_KLV_KEY(klv.key, mxf_encrypted_triplet_key) ||
IS_KLV_KEY(klv.key, mxf_essence_element_key)) { IS_KLV_KEY(klv.key, mxf_essence_element_key)) {
/* FIXME avoid seek */ /* FIXME avoid seek */
url_fseek(&s->pb, klv.offset, SEEK_SET); url_fseek(s->pb, klv.offset, SEEK_SET);
break; break;
} }
@ -957,7 +957,7 @@ static int mxf_read_header(AVFormatContext *s, AVFormatParameters *ap)
} }
} }
if (!metadata->read) if (!metadata->read)
url_fskip(&s->pb, klv.length); url_fskip(s->pb, klv.length);
} }
return mxf_parse_structural_metadata(mxf); return mxf_parse_structural_metadata(mxf);
} }
@ -1018,7 +1018,7 @@ static int mxf_read_seek(AVFormatContext *s, int stream_index, int64_t sample_ti
if (sample_time < 0) if (sample_time < 0)
sample_time = 0; sample_time = 0;
seconds = av_rescale(sample_time, st->time_base.num, st->time_base.den); seconds = av_rescale(sample_time, st->time_base.num, st->time_base.den);
url_fseek(&s->pb, (s->bit_rate * seconds) >> 3, SEEK_SET); url_fseek(s->pb, (s->bit_rate * seconds) >> 3, SEEK_SET);
av_update_cur_dts(s, st, sample_time); av_update_cur_dts(s, st, sample_time);
return 0; return 0;
} }

View File

@ -228,7 +228,7 @@ static void print_tag(const char *str, unsigned int tag, int size)
static int nsv_resync(AVFormatContext *s) static int nsv_resync(AVFormatContext *s)
{ {
NSVContext *nsv = s->priv_data; NSVContext *nsv = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
uint32_t v = 0; uint32_t v = 0;
int i; int i;
@ -275,7 +275,7 @@ static int nsv_resync(AVFormatContext *s)
static int nsv_parse_NSVf_header(AVFormatContext *s, AVFormatParameters *ap) static int nsv_parse_NSVf_header(AVFormatContext *s, AVFormatParameters *ap)
{ {
NSVContext *nsv = s->priv_data; NSVContext *nsv = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
unsigned int file_size, size; unsigned int file_size, size;
int64_t duration; int64_t duration;
int strings_size; int strings_size;
@ -394,7 +394,7 @@ static int nsv_parse_NSVf_header(AVFormatContext *s, AVFormatParameters *ap)
static int nsv_parse_NSVs_header(AVFormatContext *s, AVFormatParameters *ap) static int nsv_parse_NSVs_header(AVFormatContext *s, AVFormatParameters *ap)
{ {
NSVContext *nsv = s->priv_data; NSVContext *nsv = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
uint32_t vtag, atag; uint32_t vtag, atag;
uint16_t vwidth, vheight; uint16_t vwidth, vheight;
AVRational framerate; AVRational framerate;
@ -533,7 +533,7 @@ static int nsv_read_header(AVFormatContext *s, AVFormatParameters *ap)
static int nsv_read_chunk(AVFormatContext *s, int fill_header) static int nsv_read_chunk(AVFormatContext *s, int fill_header)
{ {
NSVContext *nsv = s->priv_data; NSVContext *nsv = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream *st[2] = {NULL, NULL}; AVStream *st[2] = {NULL, NULL};
NSVStream *nst; NSVStream *nst;
AVPacket *pkt; AVPacket *pkt;

View File

@ -181,7 +181,7 @@ static int skip_reserved(ByteIOContext *bc, int64_t pos){
static int decode_main_header(NUTContext *nut){ static int decode_main_header(NUTContext *nut){
AVFormatContext *s= nut->avf; AVFormatContext *s= nut->avf;
ByteIOContext *bc = &s->pb; ByteIOContext *bc = s->pb;
uint64_t tmp, end; uint64_t tmp, end;
unsigned int stream_count; unsigned int stream_count;
int i, j, tmp_stream, tmp_mul, tmp_pts, tmp_size, count, tmp_res; int i, j, tmp_stream, tmp_mul, tmp_pts, tmp_size, count, tmp_res;
@ -268,7 +268,7 @@ static int decode_main_header(NUTContext *nut){
static int decode_stream_header(NUTContext *nut){ static int decode_stream_header(NUTContext *nut){
AVFormatContext *s= nut->avf; AVFormatContext *s= nut->avf;
ByteIOContext *bc = &s->pb; ByteIOContext *bc = s->pb;
StreamContext *stc; StreamContext *stc;
int class, stream_id; int class, stream_id;
uint64_t tmp, end; uint64_t tmp, end;
@ -354,7 +354,7 @@ static int decode_stream_header(NUTContext *nut){
static int decode_info_header(NUTContext *nut){ static int decode_info_header(NUTContext *nut){
AVFormatContext *s= nut->avf; AVFormatContext *s= nut->avf;
ByteIOContext *bc = &s->pb; ByteIOContext *bc = s->pb;
uint64_t tmp; uint64_t tmp;
unsigned int stream_id_plus1, chapter_start, chapter_len, count; unsigned int stream_id_plus1, chapter_start, chapter_len, count;
int chapter_id, i; int chapter_id, i;
@ -412,7 +412,7 @@ static int decode_info_header(NUTContext *nut){
static int decode_syncpoint(NUTContext *nut, int64_t *ts, int64_t *back_ptr){ static int decode_syncpoint(NUTContext *nut, int64_t *ts, int64_t *back_ptr){
AVFormatContext *s= nut->avf; AVFormatContext *s= nut->avf;
ByteIOContext *bc = &s->pb; ByteIOContext *bc = s->pb;
int64_t end, tmp; int64_t end, tmp;
nut->last_syncpoint_pos= url_ftell(bc)-8; nut->last_syncpoint_pos= url_ftell(bc)-8;
@ -440,7 +440,7 @@ static int decode_syncpoint(NUTContext *nut, int64_t *ts, int64_t *back_ptr){
static int find_and_decode_index(NUTContext *nut){ static int find_and_decode_index(NUTContext *nut){
AVFormatContext *s= nut->avf; AVFormatContext *s= nut->avf;
ByteIOContext *bc = &s->pb; ByteIOContext *bc = s->pb;
uint64_t tmp, end; uint64_t tmp, end;
int i, j, syncpoint_count; int i, j, syncpoint_count;
int64_t filesize= url_fsize(bc); int64_t filesize= url_fsize(bc);
@ -531,7 +531,7 @@ static int find_and_decode_index(NUTContext *nut){
static int nut_read_header(AVFormatContext *s, AVFormatParameters *ap) static int nut_read_header(AVFormatContext *s, AVFormatParameters *ap)
{ {
NUTContext *nut = s->priv_data; NUTContext *nut = s->priv_data;
ByteIOContext *bc = &s->pb; ByteIOContext *bc = s->pb;
int64_t pos; int64_t pos;
int inited_stream_count; int inited_stream_count;
@ -592,7 +592,7 @@ static int nut_read_header(AVFormatContext *s, AVFormatParameters *ap)
static int decode_frame_header(NUTContext *nut, int64_t *pts, int *stream_id, int frame_code){ static int decode_frame_header(NUTContext *nut, int64_t *pts, int *stream_id, int frame_code){
AVFormatContext *s= nut->avf; AVFormatContext *s= nut->avf;
ByteIOContext *bc = &s->pb; ByteIOContext *bc = s->pb;
StreamContext *stc; StreamContext *stc;
int size, flags, size_mul, pts_delta, i, reserved_count; int size, flags, size_mul, pts_delta, i, reserved_count;
uint64_t tmp; uint64_t tmp;
@ -648,7 +648,7 @@ static int decode_frame_header(NUTContext *nut, int64_t *pts, int *stream_id, in
static int decode_frame(NUTContext *nut, AVPacket *pkt, int frame_code){ static int decode_frame(NUTContext *nut, AVPacket *pkt, int frame_code){
AVFormatContext *s= nut->avf; AVFormatContext *s= nut->avf;
ByteIOContext *bc = &s->pb; ByteIOContext *bc = s->pb;
int size, stream_id, discard; int size, stream_id, discard;
int64_t pts, last_IP_pts; int64_t pts, last_IP_pts;
StreamContext *stc; StreamContext *stc;
@ -684,7 +684,7 @@ static int decode_frame(NUTContext *nut, AVPacket *pkt, int frame_code){
static int nut_read_packet(AVFormatContext *s, AVPacket *pkt) static int nut_read_packet(AVFormatContext *s, AVPacket *pkt)
{ {
NUTContext *nut = s->priv_data; NUTContext *nut = s->priv_data;
ByteIOContext *bc = &s->pb; ByteIOContext *bc = s->pb;
int i, frame_code=0, ret, skip; int i, frame_code=0, ret, skip;
int64_t ts, back_ptr; int64_t ts, back_ptr;
@ -740,7 +740,7 @@ av_log(s, AV_LOG_DEBUG, "sync\n");
static int64_t nut_read_timestamp(AVFormatContext *s, int stream_index, int64_t *pos_arg, int64_t pos_limit){ static int64_t nut_read_timestamp(AVFormatContext *s, int stream_index, int64_t *pos_arg, int64_t pos_limit){
NUTContext *nut = s->priv_data; NUTContext *nut = s->priv_data;
ByteIOContext *bc = &s->pb; ByteIOContext *bc = s->pb;
int64_t pos, pts, back_ptr; int64_t pos, pts, back_ptr;
av_log(s, AV_LOG_DEBUG, "read_timestamp(X,%d,%"PRId64",%"PRId64")\n", stream_index, *pos_arg, pos_limit); av_log(s, AV_LOG_DEBUG, "read_timestamp(X,%d,%"PRId64",%"PRId64")\n", stream_index, *pos_arg, pos_limit);
@ -803,8 +803,8 @@ static int read_seek(AVFormatContext *s, int stream_index, int64_t pts, int flag
pos2= sp->back_ptr - 15; pos2= sp->back_ptr - 15;
} }
av_log(NULL, AV_LOG_DEBUG, "SEEKTO: %"PRId64"\n", pos2); av_log(NULL, AV_LOG_DEBUG, "SEEKTO: %"PRId64"\n", pos2);
pos= find_startcode(&s->pb, SYNCPOINT_STARTCODE, pos2); pos= find_startcode(s->pb, SYNCPOINT_STARTCODE, pos2);
url_fseek(&s->pb, pos, SEEK_SET); url_fseek(s->pb, pos, SEEK_SET);
av_log(NULL, AV_LOG_DEBUG, "SP: %"PRId64"\n", pos); av_log(NULL, AV_LOG_DEBUG, "SP: %"PRId64"\n", pos);
if(pos2 > pos || pos2 + 15 < pos){ if(pos2 > pos || pos2 + 15 < pos){
av_log(NULL, AV_LOG_ERROR, "no syncpoint at backptr pos\n"); av_log(NULL, AV_LOG_ERROR, "no syncpoint at backptr pos\n");

View File

@ -324,19 +324,20 @@ static int add_info(ByteIOContext *bc, char *type, char *value){
return 1; return 1;
} }
static void write_globalinfo(NUTContext *nut, ByteIOContext *bc){ static int write_globalinfo(NUTContext *nut, ByteIOContext *bc){
AVFormatContext *s= nut->avf; AVFormatContext *s= nut->avf;
ByteIOContext dyn_bc; ByteIOContext *dyn_bc;
uint8_t *dyn_buf=NULL; uint8_t *dyn_buf=NULL;
int count=0, dyn_size; int count=0, dyn_size;
int ret = url_open_dyn_buf(&dyn_bc);
if(ret < 0)
return ret;
url_open_dyn_buf(&dyn_bc); if(s->title [0]) count+= add_info(dyn_bc, "Title" , s->title);
if(s->author [0]) count+= add_info(dyn_bc, "Author" , s->author);
if(s->title [0]) count+= add_info(&dyn_bc, "Title" , s->title); if(s->copyright[0]) count+= add_info(dyn_bc, "Copyright", s->copyright);
if(s->author [0]) count+= add_info(&dyn_bc, "Author" , s->author);
if(s->copyright[0]) count+= add_info(&dyn_bc, "Copyright", s->copyright);
if(!(s->streams[0]->codec->flags & CODEC_FLAG_BITEXACT)) if(!(s->streams[0]->codec->flags & CODEC_FLAG_BITEXACT))
count+= add_info(&dyn_bc, "Encoder" , LIBAVFORMAT_IDENT); count+= add_info(dyn_bc, "Encoder" , LIBAVFORMAT_IDENT);
put_v(bc, 0); //stream_if_plus1 put_v(bc, 0); //stream_if_plus1
put_v(bc, 0); //chapter_id put_v(bc, 0); //chapter_id
@ -345,38 +346,46 @@ static void write_globalinfo(NUTContext *nut, ByteIOContext *bc){
put_v(bc, count); put_v(bc, count);
dyn_size= url_close_dyn_buf(&dyn_bc, &dyn_buf); dyn_size= url_close_dyn_buf(dyn_bc, &dyn_buf);
put_buffer(bc, dyn_buf, dyn_size); put_buffer(bc, dyn_buf, dyn_size);
av_free(dyn_buf); av_free(dyn_buf);
return 0;
} }
static void write_headers(NUTContext *nut, ByteIOContext *bc){ static int write_headers(NUTContext *nut, ByteIOContext *bc){
ByteIOContext dyn_bc; ByteIOContext *dyn_bc;
int i; int i, ret;
url_open_dyn_buf(&dyn_bc); ret = url_open_dyn_buf(&dyn_bc);
write_mainheader(nut, &dyn_bc); if(ret < 0)
put_packet(nut, bc, &dyn_bc, 1, MAIN_STARTCODE); return ret;
write_mainheader(nut, dyn_bc);
put_packet(nut, bc, dyn_bc, 1, MAIN_STARTCODE);
for (i=0; i < nut->avf->nb_streams; i++){ for (i=0; i < nut->avf->nb_streams; i++){
AVCodecContext *codec = nut->avf->streams[i]->codec; AVCodecContext *codec = nut->avf->streams[i]->codec;
url_open_dyn_buf(&dyn_bc); ret = url_open_dyn_buf(&dyn_bc);
write_streamheader(nut, &dyn_bc, codec, i); if(ret < 0)
put_packet(nut, bc, &dyn_bc, 1, STREAM_STARTCODE); return ret;
write_streamheader(nut, dyn_bc, codec, i);
put_packet(nut, bc, dyn_bc, 1, STREAM_STARTCODE);
} }
url_open_dyn_buf(&dyn_bc); ret = url_open_dyn_buf(&dyn_bc);
write_globalinfo(nut, &dyn_bc); if(ret < 0)
put_packet(nut, bc, &dyn_bc, 1, INFO_STARTCODE); return ret;
write_globalinfo(nut, dyn_bc);
put_packet(nut, bc, dyn_bc, 1, INFO_STARTCODE);
nut->last_syncpoint_pos= INT_MIN; nut->last_syncpoint_pos= INT_MIN;
nut->header_count++; nut->header_count++;
return 0;
} }
static int write_header(AVFormatContext *s){ static int write_header(AVFormatContext *s){
NUTContext *nut = s->priv_data; NUTContext *nut = s->priv_data;
ByteIOContext *bc = &s->pb; ByteIOContext *bc = s->pb;
int i, j; int i, j;
nut->avf= s; nut->avf= s;
@ -441,12 +450,13 @@ static int get_needed_flags(NUTContext *nut, StreamContext *nus, FrameCode *fc,
static int write_packet(AVFormatContext *s, AVPacket *pkt){ static int write_packet(AVFormatContext *s, AVPacket *pkt){
NUTContext *nut = s->priv_data; NUTContext *nut = s->priv_data;
StreamContext *nus= &nut->stream[pkt->stream_index]; StreamContext *nus= &nut->stream[pkt->stream_index];
ByteIOContext *bc = &s->pb, dyn_bc; ByteIOContext *bc = s->pb, *dyn_bc;
FrameCode *fc; FrameCode *fc;
int64_t coded_pts; int64_t coded_pts;
int best_length, frame_code, flags, needed_flags, i; int best_length, frame_code, flags, needed_flags, i;
int key_frame = !!(pkt->flags & PKT_FLAG_KEY); int key_frame = !!(pkt->flags & PKT_FLAG_KEY);
int store_sp=0; int store_sp=0;
int ret;
if(1LL<<(20+3*nut->header_count) <= url_ftell(bc)) if(1LL<<(20+3*nut->header_count) <= url_ftell(bc))
write_headers(nut, bc); write_headers(nut, bc);
@ -472,10 +482,12 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt){
sp= av_tree_find(nut->syncpoints, &dummy, ff_nut_sp_pos_cmp, NULL); sp= av_tree_find(nut->syncpoints, &dummy, ff_nut_sp_pos_cmp, NULL);
nut->last_syncpoint_pos= url_ftell(bc); nut->last_syncpoint_pos= url_ftell(bc);
url_open_dyn_buf(&dyn_bc); ret = url_open_dyn_buf(&dyn_bc);
put_t(nut, nus, &dyn_bc, pkt->dts); if(ret < 0)
put_v(&dyn_bc, sp ? (nut->last_syncpoint_pos - sp->pos)>>4 : 0); return ret;
put_packet(nut, bc, &dyn_bc, 1, SYNCPOINT_STARTCODE); put_t(nut, nus, dyn_bc, pkt->dts);
put_v(dyn_bc, sp ? (nut->last_syncpoint_pos - sp->pos)>>4 : 0);
put_packet(nut, bc, dyn_bc, 1, SYNCPOINT_STARTCODE);
ff_nut_add_sp(nut, nut->last_syncpoint_pos, 0/*unused*/, pkt->dts); ff_nut_add_sp(nut, nut->last_syncpoint_pos, 0/*unused*/, pkt->dts);
} }
@ -566,7 +578,7 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt){
static int write_trailer(AVFormatContext *s){ static int write_trailer(AVFormatContext *s){
NUTContext *nut= s->priv_data; NUTContext *nut= s->priv_data;
ByteIOContext *bc= &s->pb; ByteIOContext *bc= s->pb;
while(nut->header_count<3) while(nut->header_count<3)
write_headers(nut, bc); write_headers(nut, bc);

View File

@ -120,7 +120,7 @@ static int get_codec_data(ByteIOContext *pb, AVStream *vst,
static int nuv_header(AVFormatContext *s, AVFormatParameters *ap) { static int nuv_header(AVFormatContext *s, AVFormatParameters *ap) {
NUVContext *ctx = s->priv_data; NUVContext *ctx = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
char id_string[12], version_string[5]; char id_string[12], version_string[5];
double aspect, fps; double aspect, fps;
int is_mythtv, width, height, v_packs, a_packs; int is_mythtv, width, height, v_packs, a_packs;
@ -183,7 +183,7 @@ static int nuv_header(AVFormatContext *s, AVFormatParameters *ap) {
static int nuv_packet(AVFormatContext *s, AVPacket *pkt) { static int nuv_packet(AVFormatContext *s, AVPacket *pkt) {
NUVContext *ctx = s->priv_data; NUVContext *ctx = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
uint8_t hdr[HDRSIZE]; uint8_t hdr[HDRSIZE];
frametype_t frametype; frametype_t frametype;
int ret, size; int ret, size;

View File

@ -56,7 +56,7 @@ ogg_save (AVFormatContext * s)
ogg_state_t *ost = ogg_state_t *ost =
av_malloc(sizeof (*ost) + (ogg->nstreams-1) * sizeof (*ogg->streams)); av_malloc(sizeof (*ost) + (ogg->nstreams-1) * sizeof (*ogg->streams));
int i; int i;
ost->pos = url_ftell (&s->pb);; ost->pos = url_ftell (s->pb);
ost->curidx = ogg->curidx; ost->curidx = ogg->curidx;
ost->next = ogg->state; ost->next = ogg->state;
ost->nstreams = ogg->nstreams; ost->nstreams = ogg->nstreams;
@ -78,7 +78,7 @@ static int
ogg_restore (AVFormatContext * s, int discard) ogg_restore (AVFormatContext * s, int discard)
{ {
ogg_t *ogg = s->priv_data; ogg_t *ogg = s->priv_data;
ByteIOContext *bc = &s->pb; ByteIOContext *bc = s->pb;
ogg_state_t *ost = ogg->state; ogg_state_t *ost = ogg->state;
int i; int i;
@ -196,7 +196,7 @@ ogg_new_buf(ogg_t *ogg, int idx)
static int static int
ogg_read_page (AVFormatContext * s, int *str) ogg_read_page (AVFormatContext * s, int *str)
{ {
ByteIOContext *bc = &s->pb; ByteIOContext *bc = s->pb;
ogg_t *ogg = s->priv_data; ogg_t *ogg = s->priv_data;
ogg_stream_t *os; ogg_stream_t *os;
int i = 0; int i = 0;
@ -438,20 +438,20 @@ ogg_get_length (AVFormatContext * s)
int idx = -1, i; int idx = -1, i;
offset_t size, end; offset_t size, end;
if(s->pb.is_streamed) if(s->pb->is_streamed)
return 0; return 0;
// already set // already set
if (s->duration != AV_NOPTS_VALUE) if (s->duration != AV_NOPTS_VALUE)
return 0; return 0;
size = url_fsize(&s->pb); size = url_fsize(s->pb);
if(size < 0) if(size < 0)
return 0; return 0;
end = size > MAX_PAGE_SIZE? size - MAX_PAGE_SIZE: size; end = size > MAX_PAGE_SIZE? size - MAX_PAGE_SIZE: size;
ogg_save (s); ogg_save (s);
url_fseek (&s->pb, end, SEEK_SET); url_fseek (s->pb, end, SEEK_SET);
while (!ogg_read_page (s, &i)){ while (!ogg_read_page (s, &i)){
if (ogg->streams[i].granule != -1 && ogg->streams[i].granule != 0 && if (ogg->streams[i].granule != -1 && ogg->streams[i].granule != 0 &&
@ -552,7 +552,7 @@ ogg_read_timestamp (AVFormatContext * s, int stream_index, int64_t * pos_arg,
int64_t pos_limit) int64_t pos_limit)
{ {
ogg_t *ogg = s->priv_data; ogg_t *ogg = s->priv_data;
ByteIOContext *bc = &s->pb; ByteIOContext *bc = s->pb;
int64_t pts = AV_NOPTS_VALUE; int64_t pts = AV_NOPTS_VALUE;
int i; int i;
url_fseek(bc, *pos_arg, SEEK_SET); url_fseek(bc, *pos_arg, SEEK_SET);

View File

@ -37,11 +37,11 @@ typedef struct {
static void ogg_update_checksum(AVFormatContext *s, offset_t crc_offset) static void ogg_update_checksum(AVFormatContext *s, offset_t crc_offset)
{ {
offset_t pos = url_ftell(&s->pb); offset_t pos = url_ftell(s->pb);
uint32_t checksum = get_checksum(&s->pb); uint32_t checksum = get_checksum(s->pb);
url_fseek(&s->pb, crc_offset, SEEK_SET); url_fseek(s->pb, crc_offset, SEEK_SET);
put_be32(&s->pb, checksum); put_be32(s->pb, checksum);
url_fseek(&s->pb, pos, SEEK_SET); url_fseek(s->pb, pos, SEEK_SET);
} }
static int ogg_write_page(AVFormatContext *s, const uint8_t *data, int size, static int ogg_write_page(AVFormatContext *s, const uint8_t *data, int size,
@ -54,24 +54,24 @@ static int ogg_write_page(AVFormatContext *s, const uint8_t *data, int size,
size = FFMIN(size, 255*255); size = FFMIN(size, 255*255);
page_segments = FFMIN((size/255)+!!size, 255); page_segments = FFMIN((size/255)+!!size, 255);
init_checksum(&s->pb, ff_crc04C11DB7_update, 0); init_checksum(s->pb, ff_crc04C11DB7_update, 0);
put_tag(&s->pb, "OggS"); put_tag(s->pb, "OggS");
put_byte(&s->pb, 0); put_byte(s->pb, 0);
put_byte(&s->pb, flags); put_byte(s->pb, flags);
put_le64(&s->pb, granule); put_le64(s->pb, granule);
put_le32(&s->pb, stream_index); put_le32(s->pb, stream_index);
put_le32(&s->pb, oggstream->page_counter++); put_le32(s->pb, oggstream->page_counter++);
crc_offset = url_ftell(&s->pb); crc_offset = url_ftell(s->pb);
put_le32(&s->pb, 0); // crc put_le32(s->pb, 0); // crc
put_byte(&s->pb, page_segments); put_byte(s->pb, page_segments);
for (i = 0; i < page_segments-1; i++) for (i = 0; i < page_segments-1; i++)
put_byte(&s->pb, 255); put_byte(s->pb, 255);
if (size) { if (size) {
put_byte(&s->pb, size - (page_segments-1)*255); put_byte(s->pb, size - (page_segments-1)*255);
put_buffer(&s->pb, data, size); put_buffer(s->pb, data, size);
} }
ogg_update_checksum(s, crc_offset); ogg_update_checksum(s, crc_offset);
put_flush_packet(&s->pb); put_flush_packet(s->pb);
return size; return size;
} }

View File

@ -125,7 +125,7 @@ static void dump(unsigned char *buf,size_t len)
static int str_read_header(AVFormatContext *s, static int str_read_header(AVFormatContext *s,
AVFormatParameters *ap) AVFormatParameters *ap)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
StrDemuxContext *str = s->priv_data; StrDemuxContext *str = s->priv_data;
AVStream *st; AVStream *st;
unsigned char sector[RAW_CD_SECTOR_SIZE]; unsigned char sector[RAW_CD_SECTOR_SIZE];
@ -249,7 +249,7 @@ if (str->audio_channel != -1)
static int str_read_packet(AVFormatContext *s, static int str_read_packet(AVFormatContext *s,
AVPacket *ret_pkt) AVPacket *ret_pkt)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
StrDemuxContext *str = s->priv_data; StrDemuxContext *str = s->priv_data;
unsigned char sector[RAW_CD_SECTOR_SIZE]; unsigned char sector[RAW_CD_SECTOR_SIZE];
int channel; int channel;

View File

@ -33,8 +33,8 @@ static int flac_write_header(struct AVFormatContext *s)
uint8_t *streaminfo = s->streams[0]->codec->extradata; uint8_t *streaminfo = s->streams[0]->codec->extradata;
int len = s->streams[0]->codec->extradata_size; int len = s->streams[0]->codec->extradata_size;
if(streaminfo != NULL && len > 0) { if(streaminfo != NULL && len > 0) {
put_buffer(&s->pb, header, 8); put_buffer(s->pb, header, 8);
put_buffer(&s->pb, streaminfo, len); put_buffer(s->pb, streaminfo, len);
} }
return 0; return 0;
} }
@ -46,16 +46,16 @@ static int roq_write_header(struct AVFormatContext *s)
0x84, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x1E, 0x00 0x84, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x1E, 0x00
}; };
put_buffer(&s->pb, header, 8); put_buffer(s->pb, header, 8);
put_flush_packet(&s->pb); put_flush_packet(s->pb);
return 0; return 0;
} }
static int raw_write_packet(struct AVFormatContext *s, AVPacket *pkt) static int raw_write_packet(struct AVFormatContext *s, AVPacket *pkt)
{ {
put_buffer(&s->pb, pkt->data, pkt->size); put_buffer(s->pb, pkt->data, pkt->size);
put_flush_packet(&s->pb); put_flush_packet(s->pb);
return 0; return 0;
} }
#endif //CONFIG_MUXERS #endif //CONFIG_MUXERS
@ -107,7 +107,7 @@ static int raw_read_packet(AVFormatContext *s, AVPacket *pkt)
size= RAW_PACKET_SIZE; size= RAW_PACKET_SIZE;
ret= av_get_packet(&s->pb, pkt, size); ret= av_get_packet(s->pb, pkt, size);
pkt->stream_index = 0; pkt->stream_index = 0;
if (ret <= 0) { if (ret <= 0) {
@ -128,9 +128,9 @@ static int raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt)
if (av_new_packet(pkt, size) < 0) if (av_new_packet(pkt, size) < 0)
return AVERROR(EIO); return AVERROR(EIO);
pkt->pos= url_ftell(&s->pb); pkt->pos= url_ftell(s->pb);
pkt->stream_index = 0; pkt->stream_index = 0;
ret = get_partial_buffer(&s->pb, pkt->data, size); ret = get_partial_buffer(s->pb, pkt->data, size);
if (ret <= 0) { if (ret <= 0) {
av_free_packet(pkt); av_free_packet(pkt);
return AVERROR(EIO); return AVERROR(EIO);
@ -144,19 +144,19 @@ static int ingenient_read_packet(AVFormatContext *s, AVPacket *pkt)
{ {
int ret, size, w, h, unk1, unk2; int ret, size, w, h, unk1, unk2;
if (get_le32(&s->pb) != MKTAG('M', 'J', 'P', 'G')) if (get_le32(s->pb) != MKTAG('M', 'J', 'P', 'G'))
return AVERROR(EIO); // FIXME return AVERROR(EIO); // FIXME
size = get_le32(&s->pb); size = get_le32(s->pb);
w = get_le16(&s->pb); w = get_le16(s->pb);
h = get_le16(&s->pb); h = get_le16(s->pb);
url_fskip(&s->pb, 8); // zero + size (padded?) url_fskip(s->pb, 8); // zero + size (padded?)
url_fskip(&s->pb, 2); url_fskip(s->pb, 2);
unk1 = get_le16(&s->pb); unk1 = get_le16(s->pb);
unk2 = get_le16(&s->pb); unk2 = get_le16(s->pb);
url_fskip(&s->pb, 22); // ascii timestamp url_fskip(s->pb, 22); // ascii timestamp
av_log(NULL, AV_LOG_DEBUG, "Ingenient packet: size=%d, width=%d, height=%d, unk1=%d unk2=%d\n", av_log(NULL, AV_LOG_DEBUG, "Ingenient packet: size=%d, width=%d, height=%d, unk1=%d unk2=%d\n",
size, w, h, unk1, unk2); size, w, h, unk1, unk2);
@ -164,9 +164,9 @@ static int ingenient_read_packet(AVFormatContext *s, AVPacket *pkt)
if (av_new_packet(pkt, size) < 0) if (av_new_packet(pkt, size) < 0)
return AVERROR(EIO); return AVERROR(EIO);
pkt->pos = url_ftell(&s->pb); pkt->pos = url_ftell(s->pb);
pkt->stream_index = 0; pkt->stream_index = 0;
ret = get_buffer(&s->pb, pkt->data, size); ret = get_buffer(s->pb, pkt->data, size);
if (ret <= 0) { if (ret <= 0) {
av_free_packet(pkt); av_free_packet(pkt);
return AVERROR(EIO); return AVERROR(EIO);
@ -206,7 +206,7 @@ int pcm_read_seek(AVFormatContext *s,
/* recompute exact position */ /* recompute exact position */
st->cur_dts = av_rescale(pos, st->time_base.den, byte_rate * (int64_t)st->time_base.num); st->cur_dts = av_rescale(pos, st->time_base.den, byte_rate * (int64_t)st->time_base.num);
url_fseek(&s->pb, pos + s->data_offset, SEEK_SET); url_fseek(s->pb, pos + s->data_offset, SEEK_SET);
return 0; return 0;
} }
@ -843,7 +843,7 @@ static int rawvideo_read_packet(AVFormatContext *s, AVPacket *pkt)
if (packet_size < 0) if (packet_size < 0)
return -1; return -1;
ret= av_get_packet(&s->pb, pkt, packet_size); ret= av_get_packet(s->pb, pkt, packet_size);
pkt->stream_index = 0; pkt->stream_index = 0;
if (ret != packet_size) { if (ret != packet_size) {

View File

@ -50,7 +50,7 @@ static int rm_read_audio_stream_info(AVFormatContext *s, AVStream *st,
int read_all) int read_all)
{ {
RMContext *rm = s->priv_data; RMContext *rm = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
char buf[256]; char buf[256];
uint32_t version; uint32_t version;
int i; int i;
@ -191,7 +191,7 @@ static int rm_read_audio_stream_info(AVFormatContext *s, AVStream *st,
static int static int
ff_rm_read_mdpr_codecdata (AVFormatContext *s, AVStream *st) ff_rm_read_mdpr_codecdata (AVFormatContext *s, AVStream *st)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
unsigned int v; unsigned int v;
int codec_data_size, size; int codec_data_size, size;
int64_t codec_pos; int64_t codec_pos;
@ -272,7 +272,7 @@ static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap)
{ {
RMContext *rm = s->priv_data; RMContext *rm = s->priv_data;
AVStream *st; AVStream *st;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
unsigned int tag; unsigned int tag;
int tag_size, i; int tag_size, i;
unsigned int start_time, duration; unsigned int start_time, duration;
@ -395,7 +395,7 @@ static int get_num(ByteIOContext *pb, int *len)
static int sync(AVFormatContext *s, int64_t *timestamp, int *flags, int *stream_index, int64_t *pos){ static int sync(AVFormatContext *s, int64_t *timestamp, int *flags, int *stream_index, int64_t *pos){
RMContext *rm = s->priv_data; RMContext *rm = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int len, num, res, i; int len, num, res, i;
AVStream *st; AVStream *st;
uint32_t state=0xFFFFFFFF; uint32_t state=0xFFFFFFFF;
@ -451,7 +451,7 @@ skip:
static int rm_assemble_video_frame(AVFormatContext *s, RMContext *rm, AVPacket *pkt, int len) static int rm_assemble_video_frame(AVFormatContext *s, RMContext *rm, AVPacket *pkt, int len)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int hdr, seq, pic_num, len2, pos; int hdr, seq, pic_num, len2, pos;
int type; int type;
@ -550,7 +550,7 @@ static int
ff_rm_parse_packet (AVFormatContext *s, AVStream *st, int len, AVPacket *pkt, ff_rm_parse_packet (AVFormatContext *s, AVStream *st, int len, AVPacket *pkt,
int *seq, int *flags, int64_t *timestamp) int *seq, int *flags, int64_t *timestamp)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
RMContext *rm = s->priv_data; RMContext *rm = s->priv_data;
if (st->codec->codec_type == CODEC_TYPE_VIDEO) { if (st->codec->codec_type == CODEC_TYPE_VIDEO) {
@ -647,7 +647,7 @@ ff_rm_parse_packet (AVFormatContext *s, AVStream *st, int len, AVPacket *pkt,
static void static void
ff_rm_retrieve_cache (AVFormatContext *s, AVStream *st, AVPacket *pkt) ff_rm_retrieve_cache (AVFormatContext *s, AVStream *st, AVPacket *pkt)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
RMContext *rm = s->priv_data; RMContext *rm = s->priv_data;
assert (rm->audio_pkt_cnt > 0); assert (rm->audio_pkt_cnt > 0);
@ -668,7 +668,7 @@ ff_rm_retrieve_cache (AVFormatContext *s, AVStream *st, AVPacket *pkt)
static int rm_read_packet(AVFormatContext *s, AVPacket *pkt) static int rm_read_packet(AVFormatContext *s, AVPacket *pkt)
{ {
RMContext *rm = s->priv_data; RMContext *rm = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream *st; AVStream *st;
int i, len; int i, len;
int64_t timestamp, pos; int64_t timestamp, pos;
@ -759,7 +759,7 @@ static int64_t rm_read_dts(AVFormatContext *s, int stream_index,
if(rm->old_format) if(rm->old_format)
return AV_NOPTS_VALUE; return AV_NOPTS_VALUE;
url_fseek(&s->pb, pos, SEEK_SET); url_fseek(s->pb, pos, SEEK_SET);
rm->remaining_len=0; rm->remaining_len=0;
for(;;){ for(;;){
int seq=1; int seq=1;
@ -771,9 +771,9 @@ static int64_t rm_read_dts(AVFormatContext *s, int stream_index,
st = s->streams[stream_index2]; st = s->streams[stream_index2];
if (st->codec->codec_type == CODEC_TYPE_VIDEO) { if (st->codec->codec_type == CODEC_TYPE_VIDEO) {
h= get_byte(&s->pb); len--; h= get_byte(s->pb); len--;
if(!(h & 0x40)){ if(!(h & 0x40)){
seq = get_byte(&s->pb); len--; seq = get_byte(s->pb); len--;
} }
} }
@ -784,7 +784,7 @@ static int64_t rm_read_dts(AVFormatContext *s, int stream_index,
break; break;
} }
url_fskip(&s->pb, len); url_fskip(s->pb, len);
} }
*ppos = pos; *ppos = pos;
return dts; return dts;

View File

@ -45,7 +45,7 @@ static void rv10_write_header(AVFormatContext *ctx,
int data_size, int index_pos) int data_size, int index_pos)
{ {
RMContext *rm = ctx->priv_data; RMContext *rm = ctx->priv_data;
ByteIOContext *s = &ctx->pb; ByteIOContext *s = ctx->pb;
StreamInfo *stream; StreamInfo *stream;
unsigned char *data_offset_ptr, *start_ptr; unsigned char *data_offset_ptr, *start_ptr;
const char *desc, *mimetype; const char *desc, *mimetype;
@ -253,7 +253,7 @@ static void write_packet_header(AVFormatContext *ctx, StreamInfo *stream,
int length, int key_frame) int length, int key_frame)
{ {
int timestamp; int timestamp;
ByteIOContext *s = &ctx->pb; ByteIOContext *s = ctx->pb;
stream->nb_packets++; stream->nb_packets++;
stream->packet_total_size += length; stream->packet_total_size += length;
@ -308,7 +308,7 @@ static int rm_write_header(AVFormatContext *s)
} }
rv10_write_header(s, 0, 0); rv10_write_header(s, 0, 0);
put_flush_packet(&s->pb); put_flush_packet(s->pb);
return 0; return 0;
} }
@ -316,7 +316,7 @@ static int rm_write_audio(AVFormatContext *s, const uint8_t *buf, int size, int
{ {
uint8_t *buf1; uint8_t *buf1;
RMContext *rm = s->priv_data; RMContext *rm = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
StreamInfo *stream = rm->audio_stream; StreamInfo *stream = rm->audio_stream;
int i; int i;
@ -340,7 +340,7 @@ static int rm_write_audio(AVFormatContext *s, const uint8_t *buf, int size, int
static int rm_write_video(AVFormatContext *s, const uint8_t *buf, int size, int flags) static int rm_write_video(AVFormatContext *s, const uint8_t *buf, int size, int flags)
{ {
RMContext *rm = s->priv_data; RMContext *rm = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
StreamInfo *stream = rm->video_stream; StreamInfo *stream = rm->video_stream;
int key_frame = !!(flags & PKT_FLAG_KEY); int key_frame = !!(flags & PKT_FLAG_KEY);
@ -390,9 +390,9 @@ static int rm_write_trailer(AVFormatContext *s)
{ {
RMContext *rm = s->priv_data; RMContext *rm = s->priv_data;
int data_size, index_pos, i; int data_size, index_pos, i;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
if (!url_is_streamed(&s->pb)) { if (!url_is_streamed(s->pb)) {
/* end of file: finish to write header */ /* end of file: finish to write header */
index_pos = url_fseek(pb, 0, SEEK_CUR); index_pos = url_fseek(pb, 0, SEEK_CUR);
data_size = index_pos - rm->data_pos; data_size = index_pos - rm->data_pos;

View File

@ -360,7 +360,7 @@ static void rtcp_update_jitter(RTPStatistics *s, uint32_t sent_timestamp, uint32
int rtp_check_and_send_back_rr(RTPDemuxContext *s, int count) int rtp_check_and_send_back_rr(RTPDemuxContext *s, int count)
{ {
ByteIOContext pb; ByteIOContext *pb;
uint8_t *buf; uint8_t *buf;
int len; int len;
int rtcp_bytes; int rtcp_bytes;
@ -391,11 +391,11 @@ int rtp_check_and_send_back_rr(RTPDemuxContext *s, int count)
return -1; return -1;
// Receiver Report // Receiver Report
put_byte(&pb, (RTP_VERSION << 6) + 1); /* 1 report block */ put_byte(pb, (RTP_VERSION << 6) + 1); /* 1 report block */
put_byte(&pb, 201); put_byte(pb, 201);
put_be16(&pb, 7); /* length in words - 1 */ put_be16(pb, 7); /* length in words - 1 */
put_be32(&pb, s->ssrc); // our own SSRC put_be32(pb, s->ssrc); // our own SSRC
put_be32(&pb, s->ssrc); // XXX: should be the server's here! put_be32(pb, s->ssrc); // XXX: should be the server's here!
// some placeholders we should really fill... // some placeholders we should really fill...
// RFC 1889/p64 // RFC 1889/p64
extended_max= stats->cycles + stats->max_seq; extended_max= stats->cycles + stats->max_seq;
@ -412,38 +412,38 @@ int rtp_check_and_send_back_rr(RTPDemuxContext *s, int count)
fraction= (fraction<<24) | lost; fraction= (fraction<<24) | lost;
put_be32(&pb, fraction); /* 8 bits of fraction, 24 bits of total packets lost */ put_be32(pb, fraction); /* 8 bits of fraction, 24 bits of total packets lost */
put_be32(&pb, extended_max); /* max sequence received */ put_be32(pb, extended_max); /* max sequence received */
put_be32(&pb, stats->jitter>>4); /* jitter */ put_be32(pb, stats->jitter>>4); /* jitter */
if(s->last_rtcp_ntp_time==AV_NOPTS_VALUE) if(s->last_rtcp_ntp_time==AV_NOPTS_VALUE)
{ {
put_be32(&pb, 0); /* last SR timestamp */ put_be32(pb, 0); /* last SR timestamp */
put_be32(&pb, 0); /* delay since last SR */ put_be32(pb, 0); /* delay since last SR */
} else { } else {
uint32_t middle_32_bits= s->last_rtcp_ntp_time>>16; // this is valid, right? do we need to handle 64 bit values special? uint32_t middle_32_bits= s->last_rtcp_ntp_time>>16; // this is valid, right? do we need to handle 64 bit values special?
uint32_t delay_since_last= ntp_time - s->last_rtcp_ntp_time; uint32_t delay_since_last= ntp_time - s->last_rtcp_ntp_time;
put_be32(&pb, middle_32_bits); /* last SR timestamp */ put_be32(pb, middle_32_bits); /* last SR timestamp */
put_be32(&pb, delay_since_last); /* delay since last SR */ put_be32(pb, delay_since_last); /* delay since last SR */
} }
// CNAME // CNAME
put_byte(&pb, (RTP_VERSION << 6) + 1); /* 1 report block */ put_byte(pb, (RTP_VERSION << 6) + 1); /* 1 report block */
put_byte(&pb, 202); put_byte(pb, 202);
len = strlen(s->hostname); len = strlen(s->hostname);
put_be16(&pb, (6 + len + 3) / 4); /* length in words - 1 */ put_be16(pb, (6 + len + 3) / 4); /* length in words - 1 */
put_be32(&pb, s->ssrc); put_be32(pb, s->ssrc);
put_byte(&pb, 0x01); put_byte(pb, 0x01);
put_byte(&pb, len); put_byte(pb, len);
put_buffer(&pb, s->hostname, len); put_buffer(pb, s->hostname, len);
// padding // padding
for (len = (6 + len) % 4; len % 4; len++) { for (len = (6 + len) % 4; len % 4; len++) {
put_byte(&pb, 0); put_byte(pb, 0);
} }
put_flush_packet(&pb); put_flush_packet(pb);
len = url_close_dyn_buf(&pb, &buf); len = url_close_dyn_buf(pb, &buf);
if ((len > 0) && buf) { if ((len > 0) && buf) {
int result; int result;
#if defined(DEBUG) #if defined(DEBUG)
@ -775,7 +775,7 @@ static int rtp_write_header(AVFormatContext *s1)
s->first_packet = 1; s->first_packet = 1;
s->first_rtcp_ntp_time = AV_NOPTS_VALUE; s->first_rtcp_ntp_time = AV_NOPTS_VALUE;
max_packet_size = url_fget_max_packet_size(&s1->pb); max_packet_size = url_fget_max_packet_size(s1->pb);
if (max_packet_size <= 12) if (max_packet_size <= 12)
return AVERROR(EIO); return AVERROR(EIO);
s->max_payload_size = max_packet_size - 12; s->max_payload_size = max_packet_size - 12;
@ -838,16 +838,16 @@ static void rtcp_send_sr(AVFormatContext *s1, int64_t ntp_time)
s->last_rtcp_ntp_time = ntp_time; s->last_rtcp_ntp_time = ntp_time;
rtp_ts = av_rescale_q(ntp_time - s->first_rtcp_ntp_time, AV_TIME_BASE_Q, rtp_ts = av_rescale_q(ntp_time - s->first_rtcp_ntp_time, AV_TIME_BASE_Q,
s1->streams[0]->time_base) + s->base_timestamp; s1->streams[0]->time_base) + s->base_timestamp;
put_byte(&s1->pb, (RTP_VERSION << 6)); put_byte(s1->pb, (RTP_VERSION << 6));
put_byte(&s1->pb, 200); put_byte(s1->pb, 200);
put_be16(&s1->pb, 6); /* length in words - 1 */ put_be16(s1->pb, 6); /* length in words - 1 */
put_be32(&s1->pb, s->ssrc); put_be32(s1->pb, s->ssrc);
put_be32(&s1->pb, ntp_time / 1000000); put_be32(s1->pb, ntp_time / 1000000);
put_be32(&s1->pb, ((ntp_time % 1000000) << 32) / 1000000); put_be32(s1->pb, ((ntp_time % 1000000) << 32) / 1000000);
put_be32(&s1->pb, rtp_ts); put_be32(s1->pb, rtp_ts);
put_be32(&s1->pb, s->packet_count); put_be32(s1->pb, s->packet_count);
put_be32(&s1->pb, s->octet_count); put_be32(s1->pb, s->octet_count);
put_flush_packet(&s1->pb); put_flush_packet(s1->pb);
} }
/* send an rtp packet. sequence number is incremented, but the caller /* send an rtp packet. sequence number is incremented, but the caller
@ -861,14 +861,14 @@ void ff_rtp_send_data(AVFormatContext *s1, const uint8_t *buf1, int len, int m)
#endif #endif
/* build the RTP header */ /* build the RTP header */
put_byte(&s1->pb, (RTP_VERSION << 6)); put_byte(s1->pb, (RTP_VERSION << 6));
put_byte(&s1->pb, (s->payload_type & 0x7f) | ((m & 0x01) << 7)); put_byte(s1->pb, (s->payload_type & 0x7f) | ((m & 0x01) << 7));
put_be16(&s1->pb, s->seq); put_be16(s1->pb, s->seq);
put_be32(&s1->pb, s->timestamp); put_be32(s1->pb, s->timestamp);
put_be32(&s1->pb, s->ssrc); put_be32(s1->pb, s->ssrc);
put_buffer(&s1->pb, buf1, len); put_buffer(s1->pb, buf1, len);
put_flush_packet(&s1->pb); put_flush_packet(s1->pb);
s->seq++; s->seq++;
s->octet_count += len; s->octet_count += len;

View File

@ -1351,7 +1351,7 @@ static int sdp_read_header(AVFormatContext *s,
/* read the whole sdp file */ /* read the whole sdp file */
/* XXX: better loading */ /* XXX: better loading */
content = av_malloc(SDP_MAX_SIZE); content = av_malloc(SDP_MAX_SIZE);
size = get_buffer(&s->pb, content, SDP_MAX_SIZE - 1); size = get_buffer(s->pb, content, SDP_MAX_SIZE - 1);
if (size <= 0) { if (size <= 0) {
av_free(content); av_free(content);
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;

View File

@ -76,7 +76,7 @@ static int film_read_header(AVFormatContext *s,
AVFormatParameters *ap) AVFormatParameters *ap)
{ {
FilmDemuxContext *film = s->priv_data; FilmDemuxContext *film = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream *st; AVStream *st;
unsigned char scratch[256]; unsigned char scratch[256];
int i; int i;
@ -204,7 +204,7 @@ static int film_read_packet(AVFormatContext *s,
AVPacket *pkt) AVPacket *pkt)
{ {
FilmDemuxContext *film = s->priv_data; FilmDemuxContext *film = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
film_sample_t *sample; film_sample_t *sample;
int ret = 0; int ret = 0;
int i; int i;

View File

@ -72,7 +72,7 @@ static int vmd_read_header(AVFormatContext *s,
AVFormatParameters *ap) AVFormatParameters *ap)
{ {
VmdDemuxContext *vmd = s->priv_data; VmdDemuxContext *vmd = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream *st, *vst; AVStream *st, *vst;
unsigned int toc_offset; unsigned int toc_offset;
unsigned char *raw_frame_table; unsigned char *raw_frame_table;
@ -245,7 +245,7 @@ static int vmd_read_packet(AVFormatContext *s,
AVPacket *pkt) AVPacket *pkt)
{ {
VmdDemuxContext *vmd = s->priv_data; VmdDemuxContext *vmd = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int ret = 0; int ret = 0;
vmd_frame_t *frame; vmd_frame_t *frame;

View File

@ -153,7 +153,7 @@ static int siff_parse_soun(AVFormatContext *s, SIFFContext *c, ByteIOContext *pb
static int siff_read_header(AVFormatContext *s, AVFormatParameters *ap) static int siff_read_header(AVFormatContext *s, AVFormatParameters *ap)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
SIFFContext *c = s->priv_data; SIFFContext *c = s->priv_data;
uint32_t tag; uint32_t tag;
@ -189,12 +189,12 @@ static int siff_read_packet(AVFormatContext *s, AVPacket *pkt)
if (c->cur_frame >= c->frames) if (c->cur_frame >= c->frames)
return AVERROR(EIO); return AVERROR(EIO);
if (c->curstrm == -1){ if (c->curstrm == -1){
c->pktsize = get_le32(&s->pb) - 4; c->pktsize = get_le32(s->pb) - 4;
c->flags = get_le16(&s->pb); c->flags = get_le16(s->pb);
c->gmcsize = (c->flags & VB_HAS_GMC) ? 4 : 0; c->gmcsize = (c->flags & VB_HAS_GMC) ? 4 : 0;
if (c->gmcsize) if (c->gmcsize)
get_buffer(&s->pb, c->gmc, c->gmcsize); get_buffer(s->pb, c->gmc, c->gmcsize);
c->sndsize = (c->flags & VB_HAS_AUDIO) ? get_le32(&s->pb): 0; c->sndsize = (c->flags & VB_HAS_AUDIO) ? get_le32(s->pb): 0;
c->curstrm = !!(c->flags & VB_HAS_AUDIO); c->curstrm = !!(c->flags & VB_HAS_AUDIO);
} }
@ -205,11 +205,11 @@ static int siff_read_packet(AVFormatContext *s, AVPacket *pkt)
AV_WL16(pkt->data, c->flags); AV_WL16(pkt->data, c->flags);
if (c->gmcsize) if (c->gmcsize)
memcpy(pkt->data + 2, c->gmc, c->gmcsize); memcpy(pkt->data + 2, c->gmc, c->gmcsize);
get_buffer(&s->pb, pkt->data + 2 + c->gmcsize, size - c->gmcsize - 2); get_buffer(s->pb, pkt->data + 2 + c->gmcsize, size - c->gmcsize - 2);
pkt->stream_index = 0; pkt->stream_index = 0;
c->curstrm = -1; c->curstrm = -1;
}else{ }else{
if (av_get_packet(&s->pb, pkt, c->sndsize - 4) < 0) if (av_get_packet(s->pb, pkt, c->sndsize - 4) < 0)
return AVERROR(EIO); return AVERROR(EIO);
pkt->stream_index = 1; pkt->stream_index = 1;
c->curstrm = 0; c->curstrm = 0;
@ -219,7 +219,7 @@ static int siff_read_packet(AVFormatContext *s, AVPacket *pkt)
if (c->curstrm == -1) if (c->curstrm == -1)
c->cur_frame++; c->cur_frame++;
}else{ }else{
size = av_get_packet(&s->pb, pkt, c->block_align); size = av_get_packet(s->pb, pkt, c->block_align);
if(size <= 0) if(size <= 0)
return AVERROR(EIO); return AVERROR(EIO);
} }

View File

@ -98,7 +98,7 @@ static int smacker_probe(AVProbeData *p)
static int smacker_read_header(AVFormatContext *s, AVFormatParameters *ap) static int smacker_read_header(AVFormatContext *s, AVFormatParameters *ap)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
SmackerContext *smk = s->priv_data; SmackerContext *smk = s->priv_data;
AVStream *st, *ast[7]; AVStream *st, *ast[7];
int i, ret; int i, ret;
@ -226,35 +226,35 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt)
int palchange = 0; int palchange = 0;
int pos; int pos;
if (url_feof(&s->pb) || smk->cur_frame >= smk->frames) if (url_feof(s->pb) || smk->cur_frame >= smk->frames)
return AVERROR(EIO); return AVERROR(EIO);
/* if we demuxed all streams, pass another frame */ /* if we demuxed all streams, pass another frame */
if(smk->curstream < 0) { if(smk->curstream < 0) {
url_fseek(&s->pb, smk->nextpos, 0); url_fseek(s->pb, smk->nextpos, 0);
frame_size = smk->frm_size[smk->cur_frame] & (~3); frame_size = smk->frm_size[smk->cur_frame] & (~3);
flags = smk->frm_flags[smk->cur_frame]; flags = smk->frm_flags[smk->cur_frame];
/* handle palette change event */ /* handle palette change event */
pos = url_ftell(&s->pb); pos = url_ftell(s->pb);
if(flags & SMACKER_PAL){ if(flags & SMACKER_PAL){
int size, sz, t, off, j, pos; int size, sz, t, off, j, pos;
uint8_t *pal = smk->pal; uint8_t *pal = smk->pal;
uint8_t oldpal[768]; uint8_t oldpal[768];
memcpy(oldpal, pal, 768); memcpy(oldpal, pal, 768);
size = get_byte(&s->pb); size = get_byte(s->pb);
size = size * 4 - 1; size = size * 4 - 1;
frame_size -= size; frame_size -= size;
frame_size--; frame_size--;
sz = 0; sz = 0;
pos = url_ftell(&s->pb) + size; pos = url_ftell(s->pb) + size;
while(sz < 256){ while(sz < 256){
t = get_byte(&s->pb); t = get_byte(s->pb);
if(t & 0x80){ /* skip palette entries */ if(t & 0x80){ /* skip palette entries */
sz += (t & 0x7F) + 1; sz += (t & 0x7F) + 1;
pal += ((t & 0x7F) + 1) * 3; pal += ((t & 0x7F) + 1) * 3;
} else if(t & 0x40){ /* copy with offset */ } else if(t & 0x40){ /* copy with offset */
off = get_byte(&s->pb) * 3; off = get_byte(s->pb) * 3;
j = (t & 0x3F) + 1; j = (t & 0x3F) + 1;
while(j-- && sz < 256) { while(j-- && sz < 256) {
*pal++ = oldpal[off + 0]; *pal++ = oldpal[off + 0];
@ -265,12 +265,12 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt)
} }
} else { /* new entries */ } else { /* new entries */
*pal++ = smk_pal[t]; *pal++ = smk_pal[t];
*pal++ = smk_pal[get_byte(&s->pb) & 0x3F]; *pal++ = smk_pal[get_byte(s->pb) & 0x3F];
*pal++ = smk_pal[get_byte(&s->pb) & 0x3F]; *pal++ = smk_pal[get_byte(s->pb) & 0x3F];
sz++; sz++;
} }
} }
url_fseek(&s->pb, pos, 0); url_fseek(s->pb, pos, 0);
palchange |= 1; palchange |= 1;
} }
flags >>= 1; flags >>= 1;
@ -279,13 +279,13 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt)
for(i = 0; i < 7; i++) { for(i = 0; i < 7; i++) {
if(flags & 1) { if(flags & 1) {
int size; int size;
size = get_le32(&s->pb) - 4; size = get_le32(s->pb) - 4;
frame_size -= size; frame_size -= size;
frame_size -= 4; frame_size -= 4;
smk->curstream++; smk->curstream++;
smk->bufs[smk->curstream] = av_realloc(smk->bufs[smk->curstream], size); smk->bufs[smk->curstream] = av_realloc(smk->bufs[smk->curstream], size);
smk->buf_sizes[smk->curstream] = size; smk->buf_sizes[smk->curstream] = size;
ret = get_buffer(&s->pb, smk->bufs[smk->curstream], size); ret = get_buffer(s->pb, smk->bufs[smk->curstream], size);
if(ret != size) if(ret != size)
return AVERROR(EIO); return AVERROR(EIO);
smk->stream_id[smk->curstream] = smk->indexes[i]; smk->stream_id[smk->curstream] = smk->indexes[i];
@ -298,13 +298,13 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt)
palchange |= 2; palchange |= 2;
pkt->data[0] = palchange; pkt->data[0] = palchange;
memcpy(pkt->data + 1, smk->pal, 768); memcpy(pkt->data + 1, smk->pal, 768);
ret = get_buffer(&s->pb, pkt->data + 769, frame_size); ret = get_buffer(s->pb, pkt->data + 769, frame_size);
if(ret != frame_size) if(ret != frame_size)
return AVERROR(EIO); return AVERROR(EIO);
pkt->stream_index = smk->videoindex; pkt->stream_index = smk->videoindex;
pkt->size = ret + 769; pkt->size = ret + 769;
smk->cur_frame++; smk->cur_frame++;
smk->nextpos = url_ftell(&s->pb); smk->nextpos = url_ftell(s->pb);
} else { } else {
if (av_new_packet(pkt, smk->buf_sizes[smk->curstream])) if (av_new_packet(pkt, smk->buf_sizes[smk->curstream]))
return AVERROR(ENOMEM); return AVERROR(ENOMEM);

View File

@ -88,7 +88,7 @@ static int sol_read_header(AVFormatContext *s,
{ {
int size; int size;
unsigned int magic,tag; unsigned int magic,tag;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
unsigned int id, codec, channels, rate, type; unsigned int id, codec, channels, rate, type;
AVStream *st; AVStream *st;
@ -130,9 +130,9 @@ static int sol_read_packet(AVFormatContext *s,
{ {
int ret; int ret;
if (url_feof(&s->pb)) if (url_feof(s->pb))
return AVERROR(EIO); return AVERROR(EIO);
ret= av_get_packet(&s->pb, pkt, MAX_SIZE); ret= av_get_packet(s->pb, pkt, MAX_SIZE);
pkt->stream_index = 0; pkt->stream_index = 0;
/* note: we need to modify the packet size here to handle the last /* note: we need to modify the packet size here to handle the last

View File

@ -96,7 +96,7 @@ static const AVCodecTag swf_audio_codec_tags[] = {
static void put_swf_tag(AVFormatContext *s, int tag) static void put_swf_tag(AVFormatContext *s, int tag)
{ {
SWFContext *swf = s->priv_data; SWFContext *swf = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
swf->tag_pos = url_ftell(pb); swf->tag_pos = url_ftell(pb);
swf->tag = tag; swf->tag = tag;
@ -112,7 +112,7 @@ static void put_swf_tag(AVFormatContext *s, int tag)
static void put_swf_end_tag(AVFormatContext *s) static void put_swf_end_tag(AVFormatContext *s)
{ {
SWFContext *swf = s->priv_data; SWFContext *swf = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
offset_t pos; offset_t pos;
int tag_len, tag; int tag_len, tag;
@ -244,7 +244,7 @@ static void put_swf_matrix(ByteIOContext *pb,
static int swf_write_header(AVFormatContext *s) static int swf_write_header(AVFormatContext *s)
{ {
SWFContext *swf = s->priv_data; SWFContext *swf = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVCodecContext *enc, *audio_enc, *video_enc; AVCodecContext *enc, *audio_enc, *video_enc;
PutBitContext p; PutBitContext p;
uint8_t buf1[256]; uint8_t buf1[256];
@ -392,16 +392,16 @@ static int swf_write_header(AVFormatContext *s)
v |= 0x02; /* 16 bit playback */ v |= 0x02; /* 16 bit playback */
if (audio_enc->channels == 2) if (audio_enc->channels == 2)
v |= 0x01; /* stereo playback */ v |= 0x01; /* stereo playback */
put_byte(&s->pb, v); put_byte(s->pb, v);
v |= 0x20; /* mp3 compressed */ v |= 0x20; /* mp3 compressed */
put_byte(&s->pb, v); put_byte(s->pb, v);
put_le16(&s->pb, swf->samples_per_frame); /* avg samples per frame */ put_le16(s->pb, swf->samples_per_frame); /* avg samples per frame */
put_le16(&s->pb, 0); put_le16(s->pb, 0);
put_swf_end_tag(s); put_swf_end_tag(s);
} }
put_flush_packet(&s->pb); put_flush_packet(s->pb);
return 0; return 0;
} }
@ -409,7 +409,7 @@ static int swf_write_video(AVFormatContext *s,
AVCodecContext *enc, const uint8_t *buf, int size) AVCodecContext *enc, const uint8_t *buf, int size)
{ {
SWFContext *swf = s->priv_data; SWFContext *swf = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
/* Flash Player limit */ /* Flash Player limit */
if (swf->swf_frame_number == 16000) { if (swf->swf_frame_number == 16000) {
@ -516,7 +516,7 @@ static int swf_write_video(AVFormatContext *s,
put_swf_tag(s, TAG_SHOWFRAME); put_swf_tag(s, TAG_SHOWFRAME);
put_swf_end_tag(s); put_swf_end_tag(s);
put_flush_packet(&s->pb); put_flush_packet(s->pb);
return 0; return 0;
} }
@ -560,7 +560,7 @@ static int swf_write_packet(AVFormatContext *s, AVPacket *pkt)
static int swf_write_trailer(AVFormatContext *s) static int swf_write_trailer(AVFormatContext *s)
{ {
SWFContext *swf = s->priv_data; SWFContext *swf = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVCodecContext *enc, *video_enc; AVCodecContext *enc, *video_enc;
int file_size, i; int file_size, i;
@ -574,10 +574,10 @@ static int swf_write_trailer(AVFormatContext *s)
put_swf_tag(s, TAG_END); put_swf_tag(s, TAG_END);
put_swf_end_tag(s); put_swf_end_tag(s);
put_flush_packet(&s->pb); put_flush_packet(s->pb);
/* patch file size and number of frames if not streamed */ /* patch file size and number of frames if not streamed */
if (!url_is_streamed(&s->pb) && video_enc) { if (!url_is_streamed(s->pb) && video_enc) {
file_size = url_ftell(pb); file_size = url_ftell(pb);
url_fseek(pb, 4, SEEK_SET); url_fseek(pb, 4, SEEK_SET);
put_le32(pb, file_size); put_le32(pb, file_size);
@ -628,7 +628,7 @@ static int swf_probe(AVProbeData *p)
static int swf_read_header(AVFormatContext *s, AVFormatParameters *ap) static int swf_read_header(AVFormatContext *s, AVFormatParameters *ap)
{ {
SWFContext *swf = s->priv_data; SWFContext *swf = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int nbits, len, tag; int nbits, len, tag;
tag = get_be32(pb) & 0xffffff00; tag = get_be32(pb) & 0xffffff00;
@ -655,7 +655,7 @@ static int swf_read_header(AVFormatContext *s, AVFormatParameters *ap)
static int swf_read_packet(AVFormatContext *s, AVPacket *pkt) static int swf_read_packet(AVFormatContext *s, AVPacket *pkt)
{ {
SWFContext *swf = s->priv_data; SWFContext *swf = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream *vst = NULL, *ast = NULL, *st = 0; AVStream *vst = NULL, *ast = NULL, *st = 0;
int tag, len, i, frame, v; int tag, len, i, frame, v;

View File

@ -57,7 +57,7 @@ static int thp_read_header(AVFormatContext *s,
{ {
ThpDemuxContext *thp = s->priv_data; ThpDemuxContext *thp = s->priv_data;
AVStream *st; AVStream *st;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int i; int i;
/* Read the file header. */ /* Read the file header. */
@ -140,7 +140,7 @@ static int thp_read_packet(AVFormatContext *s,
AVPacket *pkt) AVPacket *pkt)
{ {
ThpDemuxContext *thp = s->priv_data; ThpDemuxContext *thp = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int size; int size;
int ret; int ret;

View File

@ -184,7 +184,7 @@ static int seq_read_header(AVFormatContext *s, AVFormatParameters *ap)
{ {
int i, rc; int i, rc;
SeqDemuxContext *seq = s->priv_data; SeqDemuxContext *seq = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream *st; AVStream *st;
/* init internal buffers */ /* init internal buffers */
@ -241,7 +241,7 @@ static int seq_read_packet(AVFormatContext *s, AVPacket *pkt)
{ {
int rc; int rc;
SeqDemuxContext *seq = s->priv_data; SeqDemuxContext *seq = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
if (!seq->audio_buffer_full) { if (!seq->audio_buffer_full) {
rc = seq_parse_frame_data(seq, pb); rc = seq_parse_frame_data(seq, pb);

View File

@ -40,25 +40,25 @@ static int tta_read_header(AVFormatContext *s, AVFormatParameters *ap)
int i, channels, bps, samplerate, datalen, framelen; int i, channels, bps, samplerate, datalen, framelen;
uint64_t framepos; uint64_t framepos;
if (get_le32(&s->pb) != ff_get_fourcc("TTA1")) if (get_le32(s->pb) != ff_get_fourcc("TTA1"))
return -1; // not tta file return -1; // not tta file
url_fskip(&s->pb, 2); // FIXME: flags url_fskip(s->pb, 2); // FIXME: flags
channels = get_le16(&s->pb); channels = get_le16(s->pb);
bps = get_le16(&s->pb); bps = get_le16(s->pb);
samplerate = get_le32(&s->pb); samplerate = get_le32(s->pb);
if(samplerate <= 0 || samplerate > 1000000){ if(samplerate <= 0 || samplerate > 1000000){
av_log(s, AV_LOG_ERROR, "nonsense samplerate\n"); av_log(s, AV_LOG_ERROR, "nonsense samplerate\n");
return -1; return -1;
} }
datalen = get_le32(&s->pb); datalen = get_le32(s->pb);
if(datalen < 0){ if(datalen < 0){
av_log(s, AV_LOG_ERROR, "nonsense datalen\n"); av_log(s, AV_LOG_ERROR, "nonsense datalen\n");
return -1; return -1;
} }
url_fskip(&s->pb, 4); // header crc url_fskip(s->pb, 4); // header crc
framelen = samplerate*256/245; framelen = samplerate*256/245;
c->totalframes = datalen / framelen + ((datalen % framelen) ? 1 : 0); c->totalframes = datalen / framelen + ((datalen % framelen) ? 1 : 0);
@ -77,14 +77,14 @@ static int tta_read_header(AVFormatContext *s, AVFormatParameters *ap)
st->start_time = 0; st->start_time = 0;
st->duration = datalen; st->duration = datalen;
framepos = url_ftell(&s->pb) + 4*c->totalframes + 4; framepos = url_ftell(s->pb) + 4*c->totalframes + 4;
for (i = 0; i < c->totalframes; i++) { for (i = 0; i < c->totalframes; i++) {
uint32_t size = get_le32(&s->pb); uint32_t size = get_le32(s->pb);
av_add_index_entry(st, framepos, i*framelen, size, 0, AVINDEX_KEYFRAME); av_add_index_entry(st, framepos, i*framelen, size, 0, AVINDEX_KEYFRAME);
framepos += size; framepos += size;
} }
url_fskip(&s->pb, 4); // seektable crc url_fskip(s->pb, 4); // seektable crc
st->codec->codec_type = CODEC_TYPE_AUDIO; st->codec->codec_type = CODEC_TYPE_AUDIO;
st->codec->codec_id = CODEC_ID_TTA; st->codec->codec_id = CODEC_ID_TTA;
@ -92,15 +92,15 @@ static int tta_read_header(AVFormatContext *s, AVFormatParameters *ap)
st->codec->sample_rate = samplerate; st->codec->sample_rate = samplerate;
st->codec->bits_per_sample = bps; st->codec->bits_per_sample = bps;
st->codec->extradata_size = url_ftell(&s->pb); st->codec->extradata_size = url_ftell(s->pb);
if(st->codec->extradata_size+FF_INPUT_BUFFER_PADDING_SIZE <= (unsigned)st->codec->extradata_size){ if(st->codec->extradata_size+FF_INPUT_BUFFER_PADDING_SIZE <= (unsigned)st->codec->extradata_size){
//this check is redundant as get_buffer should fail //this check is redundant as get_buffer should fail
av_log(s, AV_LOG_ERROR, "extradata_size too large\n"); av_log(s, AV_LOG_ERROR, "extradata_size too large\n");
return -1; return -1;
} }
st->codec->extradata = av_mallocz(st->codec->extradata_size+FF_INPUT_BUFFER_PADDING_SIZE); st->codec->extradata = av_mallocz(st->codec->extradata_size+FF_INPUT_BUFFER_PADDING_SIZE);
url_fseek(&s->pb, 0, SEEK_SET); url_fseek(s->pb, 0, SEEK_SET);
get_buffer(&s->pb, st->codec->extradata, st->codec->extradata_size); get_buffer(s->pb, st->codec->extradata, st->codec->extradata_size);
return 0; return 0;
} }
@ -117,7 +117,7 @@ static int tta_read_packet(AVFormatContext *s, AVPacket *pkt)
size = st->index_entries[c->currentframe].size; size = st->index_entries[c->currentframe].size;
ret = av_get_packet(&s->pb, pkt, size); ret = av_get_packet(s->pb, pkt, size);
pkt->dts = st->index_entries[c->currentframe++].timestamp; pkt->dts = st->index_entries[c->currentframe++].timestamp;
return ret; return ret;
} }
@ -131,7 +131,7 @@ static int tta_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp
return -1; return -1;
c->currentframe = index; c->currentframe = index;
url_fseek(&s->pb, st->index_entries[index].pos, SEEK_SET); url_fseek(s->pb, st->index_entries[index].pos, SEEK_SET);
return 0; return 0;
} }

View File

@ -51,7 +51,7 @@ static int txd_read_header(AVFormatContext *s, AVFormatParameters *ap) {
} }
static int txd_read_packet(AVFormatContext *s, AVPacket *pkt) { static int txd_read_packet(AVFormatContext *s, AVPacket *pkt) {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
unsigned int id, chunk_size, marker; unsigned int id, chunk_size, marker;
int ret; int ret;
@ -60,7 +60,7 @@ next_chunk:
chunk_size = get_le32(pb); chunk_size = get_le32(pb);
marker = get_le32(pb); marker = get_le32(pb);
if (url_feof(&s->pb)) if (url_feof(s->pb))
return AVERROR(EIO); return AVERROR(EIO);
if (marker != TXD_MARKER && marker != TXD_MARKER2) { if (marker != TXD_MARKER && marker != TXD_MARKER2) {
av_log(NULL, AV_LOG_ERROR, "marker does not match\n"); av_log(NULL, AV_LOG_ERROR, "marker does not match\n");
@ -72,7 +72,7 @@ next_chunk:
if (chunk_size > 100) if (chunk_size > 100)
break; break;
case TXD_EXTRA: case TXD_EXTRA:
url_fskip(&s->pb, chunk_size); url_fskip(s->pb, chunk_size);
case TXD_FILE: case TXD_FILE:
case TXD_TEXTURE: case TXD_TEXTURE:
goto next_chunk; goto next_chunk;
@ -81,7 +81,7 @@ next_chunk:
return AVERROR(EIO); return AVERROR(EIO);
} }
ret = av_get_packet(&s->pb, pkt, chunk_size); ret = av_get_packet(s->pb, pkt, chunk_size);
pkt->stream_index = 0; pkt->stream_index = 0;
return ret <= 0 ? AVERROR(EIO) : ret; return ret <= 0 ? AVERROR(EIO) : ret;

View File

@ -361,8 +361,7 @@ int av_open_input_stream(AVFormatContext **ic_ptr,
goto fail; goto fail;
} }
ic->iformat = fmt; ic->iformat = fmt;
if (pb) ic->pb = pb;
ic->pb = *pb;
ic->duration = AV_NOPTS_VALUE; ic->duration = AV_NOPTS_VALUE;
ic->start_time = AV_NOPTS_VALUE; ic->start_time = AV_NOPTS_VALUE;
av_strlcpy(ic->filename, filename, sizeof(ic->filename)); av_strlcpy(ic->filename, filename, sizeof(ic->filename));
@ -383,7 +382,7 @@ int av_open_input_stream(AVFormatContext **ic_ptr,
goto fail; goto fail;
if (pb && !ic->data_offset) if (pb && !ic->data_offset)
ic->data_offset = url_ftell(&ic->pb); ic->data_offset = url_ftell(ic->pb);
*ic_ptr = ic; *ic_ptr = ic;
return 0; return 0;
@ -407,7 +406,7 @@ int av_open_input_file(AVFormatContext **ic_ptr, const char *filename,
{ {
int err, must_open_file, file_opened, probe_size; int err, must_open_file, file_opened, probe_size;
AVProbeData probe_data, *pd = &probe_data; AVProbeData probe_data, *pd = &probe_data;
ByteIOContext pb1, *pb = &pb1; ByteIOContext *pb;
file_opened = 0; file_opened = 0;
pd->filename = ""; pd->filename = "";
@ -431,7 +430,7 @@ int av_open_input_file(AVFormatContext **ic_ptr, const char *filename,
if (!fmt || must_open_file) { if (!fmt || must_open_file) {
/* if no file needed do not try to open one */ /* if no file needed do not try to open one */
if ((err=url_fopen(pb, filename, URL_RDONLY)) < 0) { if ((err=url_fopen(&pb, filename, URL_RDONLY)) < 0) {
goto fail; goto fail;
} }
file_opened = 1; file_opened = 1;
@ -447,7 +446,7 @@ int av_open_input_file(AVFormatContext **ic_ptr, const char *filename,
memset(pd->buf+pd->buf_size, 0, AVPROBE_PADDING_SIZE); memset(pd->buf+pd->buf_size, 0, AVPROBE_PADDING_SIZE);
if (url_fseek(pb, 0, SEEK_SET) < 0) { if (url_fseek(pb, 0, SEEK_SET) < 0) {
url_fclose(pb); url_fclose(pb);
if (url_fopen(pb, filename, URL_RDONLY) < 0) { if (url_fopen(&pb, filename, URL_RDONLY) < 0) {
file_opened = 0; file_opened = 0;
err = AVERROR(EIO); err = AVERROR(EIO);
goto fail; goto fail;
@ -1130,7 +1129,7 @@ int av_seek_frame_binary(AVFormatContext *s, int stream_index, int64_t target_ts
return -1; return -1;
/* do the seek */ /* do the seek */
url_fseek(&s->pb, pos, SEEK_SET); url_fseek(s->pb, pos, SEEK_SET);
av_update_cur_dts(s, st, ts); av_update_cur_dts(s, st, ts);
@ -1155,7 +1154,7 @@ int64_t av_gen_search(AVFormatContext *s, int stream_index, int64_t target_ts, i
if(ts_max == AV_NOPTS_VALUE){ if(ts_max == AV_NOPTS_VALUE){
int step= 1024; int step= 1024;
filesize = url_fsize(&s->pb); filesize = url_fsize(s->pb);
pos_max = filesize - 1; pos_max = filesize - 1;
do{ do{
pos_max -= step; pos_max -= step;
@ -1261,12 +1260,12 @@ static int av_seek_frame_byte(AVFormatContext *s, int stream_index, int64_t pos,
#endif #endif
pos_min = s->data_offset; pos_min = s->data_offset;
pos_max = url_fsize(&s->pb) - 1; pos_max = url_fsize(s->pb) - 1;
if (pos < pos_min) pos= pos_min; if (pos < pos_min) pos= pos_min;
else if(pos > pos_max) pos= pos_max; else if(pos > pos_max) pos= pos_max;
url_fseek(&s->pb, pos, SEEK_SET); url_fseek(s->pb, pos, SEEK_SET);
#if 0 #if 0
av_update_cur_dts(s, st, ts); av_update_cur_dts(s, st, ts);
@ -1291,10 +1290,10 @@ static int av_seek_frame_generic(AVFormatContext *s,
if(st->index_entries && st->nb_index_entries){ if(st->index_entries && st->nb_index_entries){
ie= &st->index_entries[st->nb_index_entries-1]; ie= &st->index_entries[st->nb_index_entries-1];
url_fseek(&s->pb, ie->pos, SEEK_SET); url_fseek(s->pb, ie->pos, SEEK_SET);
av_update_cur_dts(s, st, ie->timestamp); av_update_cur_dts(s, st, ie->timestamp);
}else }else
url_fseek(&s->pb, 0, SEEK_SET); url_fseek(s->pb, 0, SEEK_SET);
for(i=0;; i++) { for(i=0;; i++) {
int ret = av_read_frame(s, &pkt); int ret = av_read_frame(s, &pkt);
@ -1317,7 +1316,7 @@ static int av_seek_frame_generic(AVFormatContext *s,
return 0; return 0;
} }
ie = &st->index_entries[index]; ie = &st->index_entries[index];
url_fseek(&s->pb, ie->pos, SEEK_SET); url_fseek(s->pb, ie->pos, SEEK_SET);
av_update_cur_dts(s, st, ie->timestamp); av_update_cur_dts(s, st, ie->timestamp);
@ -1509,7 +1508,7 @@ static void av_estimate_timings_from_pts(AVFormatContext *ic, offset_t old_offse
/* we read the first packets to get the first PTS (not fully /* we read the first packets to get the first PTS (not fully
accurate, but it is enough now) */ accurate, but it is enough now) */
url_fseek(&ic->pb, 0, SEEK_SET); url_fseek(ic->pb, 0, SEEK_SET);
read_size = 0; read_size = 0;
for(;;) { for(;;) {
if (read_size >= DURATION_MAX_READ_SIZE) if (read_size >= DURATION_MAX_READ_SIZE)
@ -1542,7 +1541,7 @@ static void av_estimate_timings_from_pts(AVFormatContext *ic, offset_t old_offse
if (offset < 0) if (offset < 0)
offset = 0; offset = 0;
url_fseek(&ic->pb, offset, SEEK_SET); url_fseek(ic->pb, offset, SEEK_SET);
read_size = 0; read_size = 0;
for(;;) { for(;;) {
if (read_size >= DURATION_MAX_READ_SIZE) if (read_size >= DURATION_MAX_READ_SIZE)
@ -1568,7 +1567,7 @@ static void av_estimate_timings_from_pts(AVFormatContext *ic, offset_t old_offse
fill_all_stream_timings(ic); fill_all_stream_timings(ic);
url_fseek(&ic->pb, old_offset, SEEK_SET); url_fseek(ic->pb, old_offset, SEEK_SET);
for(i=0; i<ic->nb_streams; i++){ for(i=0; i<ic->nb_streams; i++){
st= ic->streams[i]; st= ic->streams[i];
st->cur_dts= st->first_dts; st->cur_dts= st->first_dts;
@ -1584,7 +1583,7 @@ static void av_estimate_timings(AVFormatContext *ic, offset_t old_offset)
if (ic->iformat->flags & AVFMT_NOFILE) { if (ic->iformat->flags & AVFMT_NOFILE) {
file_size = 0; file_size = 0;
} else { } else {
file_size = url_fsize(&ic->pb); file_size = url_fsize(ic->pb);
if (file_size < 0) if (file_size < 0)
file_size = 0; file_size = 0;
} }
@ -1592,7 +1591,7 @@ static void av_estimate_timings(AVFormatContext *ic, offset_t old_offset)
if ((!strcmp(ic->iformat->name, "mpeg") || if ((!strcmp(ic->iformat->name, "mpeg") ||
!strcmp(ic->iformat->name, "mpegts")) && !strcmp(ic->iformat->name, "mpegts")) &&
file_size && !ic->pb.is_streamed) { file_size && !ic->pb->is_streamed) {
/* get accurate estimate from the PTSes */ /* get accurate estimate from the PTSes */
av_estimate_timings_from_pts(ic, old_offset); av_estimate_timings_from_pts(ic, old_offset);
} else if (av_has_duration(ic)) { } else if (av_has_duration(ic)) {
@ -1757,7 +1756,7 @@ int av_find_stream_info(AVFormatContext *ic)
int64_t last_dts[MAX_STREAMS]; int64_t last_dts[MAX_STREAMS];
int duration_count[MAX_STREAMS]={0}; int duration_count[MAX_STREAMS]={0};
double (*duration_error)[MAX_STD_TIMEBASES]; double (*duration_error)[MAX_STD_TIMEBASES];
offset_t old_offset = url_ftell(&ic->pb); offset_t old_offset = url_ftell(ic->pb);
int64_t codec_info_duration[MAX_STREAMS]={0}; int64_t codec_info_duration[MAX_STREAMS]={0};
int codec_info_nb_frames[MAX_STREAMS]={0}; int codec_info_nb_frames[MAX_STREAMS]={0};
AVProbeData probe_data[MAX_STREAMS]; AVProbeData probe_data[MAX_STREAMS];
@ -1989,7 +1988,7 @@ int av_find_stream_info(AVFormatContext *ic)
} }
st->cur_dts= st->first_dts; st->cur_dts= st->first_dts;
} }
url_fseek(&ic->pb, ic->data_offset, SEEK_SET); url_fseek(ic->pb, ic->data_offset, SEEK_SET);
} }
#if 0 #if 0
@ -2075,7 +2074,7 @@ void av_close_input_file(AVFormatContext *s)
must_open_file = 0; must_open_file = 0;
} }
if (must_open_file) { if (must_open_file) {
url_fclose(&s->pb); url_fclose(s->pb);
} }
av_freep(&s->priv_data); av_freep(&s->priv_data);
av_free(s); av_free(s);
@ -2343,7 +2342,7 @@ int av_write_frame(AVFormatContext *s, AVPacket *pkt)
ret= s->oformat->write_packet(s, pkt); ret= s->oformat->write_packet(s, pkt);
if(!ret) if(!ret)
ret= url_ferror(&s->pb); ret= url_ferror(s->pb);
return ret; return ret;
} }
@ -2444,8 +2443,8 @@ int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt){
if(ret<0) if(ret<0)
return ret; return ret;
if(url_ferror(&s->pb)) if(url_ferror(s->pb))
return url_ferror(&s->pb); return url_ferror(s->pb);
} }
} }
@ -2468,7 +2467,7 @@ int av_write_trailer(AVFormatContext *s)
if(ret<0) if(ret<0)
goto fail; goto fail;
if(url_ferror(&s->pb)) if(url_ferror(s->pb))
goto fail; goto fail;
} }
@ -2476,7 +2475,7 @@ int av_write_trailer(AVFormatContext *s)
ret = s->oformat->write_trailer(s); ret = s->oformat->write_trailer(s);
fail: fail:
if(ret == 0) if(ret == 0)
ret=url_ferror(&s->pb); ret=url_ferror(s->pb);
for(i=0;i<s->nb_streams;i++) for(i=0;i<s->nb_streams;i++)
av_freep(&s->streams[i]->priv_data); av_freep(&s->streams[i]->priv_data);
av_freep(&s->priv_data); av_freep(&s->priv_data);

View File

@ -39,7 +39,7 @@ static int voc_probe(AVProbeData *p)
static int voc_read_header(AVFormatContext *s, AVFormatParameters *ap) static int voc_read_header(AVFormatContext *s, AVFormatParameters *ap)
{ {
voc_dec_context_t *voc = s->priv_data; voc_dec_context_t *voc = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int header_size; int header_size;
AVStream *st; AVStream *st;
@ -64,7 +64,7 @@ voc_get_packet(AVFormatContext *s, AVPacket *pkt, AVStream *st, int max_size)
{ {
voc_dec_context_t *voc = s->priv_data; voc_dec_context_t *voc = s->priv_data;
AVCodecContext *dec = st->codec; AVCodecContext *dec = st->codec;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
voc_type_t type; voc_type_t type;
int size; int size;
int sample_rate = 0; int sample_rate = 0;

View File

@ -28,7 +28,7 @@ typedef struct voc_enc_context {
static int voc_write_header(AVFormatContext *s) static int voc_write_header(AVFormatContext *s)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
const int header_size = 26; const int header_size = 26;
const int version = 0x0114; const int version = 0x0114;
@ -48,7 +48,7 @@ static int voc_write_packet(AVFormatContext *s, AVPacket *pkt)
{ {
voc_enc_context_t *voc = s->priv_data; voc_enc_context_t *voc = s->priv_data;
AVCodecContext *enc = s->streams[0]->codec; AVCodecContext *enc = s->streams[0]->codec;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
if (!voc->param_written) { if (!voc->param_written) {
if (enc->codec_tag > 0xFF) { if (enc->codec_tag > 0xFF) {
@ -84,7 +84,7 @@ static int voc_write_packet(AVFormatContext *s, AVPacket *pkt)
static int voc_write_trailer(AVFormatContext *s) static int voc_write_trailer(AVFormatContext *s)
{ {
put_byte(&s->pb, 0); put_byte(s->pb, 0);
return 0; return 0;
} }

View File

@ -34,7 +34,7 @@ typedef struct {
static int wav_write_header(AVFormatContext *s) static int wav_write_header(AVFormatContext *s)
{ {
WAVContext *wav = s->priv_data; WAVContext *wav = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
offset_t fmt, fact; offset_t fmt, fact;
put_tag(pb, "RIFF"); put_tag(pb, "RIFF");
@ -50,7 +50,7 @@ static int wav_write_header(AVFormatContext *s)
end_tag(pb, fmt); end_tag(pb, fmt);
if(s->streams[0]->codec->codec_tag != 0x01 /* hence for all other than PCM */ if(s->streams[0]->codec->codec_tag != 0x01 /* hence for all other than PCM */
&& !url_is_streamed(&s->pb)) { && !url_is_streamed(s->pb)) {
fact = start_tag(pb, "fact"); fact = start_tag(pb, "fact");
put_le32(pb, 0); put_le32(pb, 0);
end_tag(pb, fact); end_tag(pb, fact);
@ -70,7 +70,7 @@ static int wav_write_header(AVFormatContext *s)
static int wav_write_packet(AVFormatContext *s, AVPacket *pkt) static int wav_write_packet(AVFormatContext *s, AVPacket *pkt)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
WAVContext *wav = s->priv_data; WAVContext *wav = s->priv_data;
put_buffer(pb, pkt->data, pkt->size); put_buffer(pb, pkt->data, pkt->size);
if(pkt->pts != AV_NOPTS_VALUE) { if(pkt->pts != AV_NOPTS_VALUE) {
@ -84,11 +84,11 @@ static int wav_write_packet(AVFormatContext *s, AVPacket *pkt)
static int wav_write_trailer(AVFormatContext *s) static int wav_write_trailer(AVFormatContext *s)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
WAVContext *wav = s->priv_data; WAVContext *wav = s->priv_data;
offset_t file_size; offset_t file_size;
if (!url_is_streamed(&s->pb)) { if (!url_is_streamed(s->pb)) {
end_tag(pb, wav->data); end_tag(pb, wav->data);
/* update file size */ /* update file size */
@ -156,7 +156,7 @@ static int wav_read_header(AVFormatContext *s,
{ {
int size; int size;
unsigned int tag; unsigned int tag;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream *st; AVStream *st;
WAVContext *wav = s->priv_data; WAVContext *wav = s->priv_data;
@ -199,17 +199,17 @@ static int wav_read_packet(AVFormatContext *s,
AVStream *st; AVStream *st;
WAVContext *wav = s->priv_data; WAVContext *wav = s->priv_data;
if (url_feof(&s->pb)) if (url_feof(s->pb))
return AVERROR(EIO); return AVERROR(EIO);
st = s->streams[0]; st = s->streams[0];
left= wav->data_end - url_ftell(&s->pb); left= wav->data_end - url_ftell(s->pb);
if(left <= 0){ if(left <= 0){
left = find_tag(&(s->pb), MKTAG('d', 'a', 't', 'a')); left = find_tag(s->pb, MKTAG('d', 'a', 't', 'a'));
if (left < 0) { if (left < 0) {
return AVERROR(EIO); return AVERROR(EIO);
} }
wav->data_end= url_ftell(&s->pb) + left; wav->data_end= url_ftell(s->pb) + left;
} }
size = MAX_SIZE; size = MAX_SIZE;
@ -219,7 +219,7 @@ static int wav_read_packet(AVFormatContext *s,
size = (size / st->codec->block_align) * st->codec->block_align; size = (size / st->codec->block_align) * st->codec->block_align;
} }
size= FFMIN(size, left); size= FFMIN(size, left);
ret= av_get_packet(&s->pb, pkt, size); ret= av_get_packet(s->pb, pkt, size);
if (ret <= 0) if (ret <= 0)
return AVERROR(EIO); return AVERROR(EIO);
pkt->stream_index = 0; pkt->stream_index = 0;

View File

@ -126,7 +126,7 @@ static int wc3_read_header(AVFormatContext *s,
AVFormatParameters *ap) AVFormatParameters *ap)
{ {
Wc3DemuxContext *wc3 = s->priv_data; Wc3DemuxContext *wc3 = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
unsigned int fourcc_tag; unsigned int fourcc_tag;
unsigned int size; unsigned int size;
AVStream *st; AVStream *st;
@ -272,7 +272,7 @@ static int wc3_read_packet(AVFormatContext *s,
AVPacket *pkt) AVPacket *pkt)
{ {
Wc3DemuxContext *wc3 = s->priv_data; Wc3DemuxContext *wc3 = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
unsigned int fourcc_tag; unsigned int fourcc_tag;
unsigned int size; unsigned int size;
int packet_read = 0; int packet_read = 0;

View File

@ -118,7 +118,7 @@ static int wsaud_read_header(AVFormatContext *s,
AVFormatParameters *ap) AVFormatParameters *ap)
{ {
WsAudDemuxContext *wsaud = s->priv_data; WsAudDemuxContext *wsaud = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream *st; AVStream *st;
unsigned char header[AUD_HEADER_SIZE]; unsigned char header[AUD_HEADER_SIZE];
@ -160,7 +160,7 @@ static int wsaud_read_packet(AVFormatContext *s,
AVPacket *pkt) AVPacket *pkt)
{ {
WsAudDemuxContext *wsaud = s->priv_data; WsAudDemuxContext *wsaud = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
unsigned char preamble[AUD_CHUNK_PREAMBLE_SIZE]; unsigned char preamble[AUD_CHUNK_PREAMBLE_SIZE];
unsigned int chunk_size; unsigned int chunk_size;
int ret = 0; int ret = 0;
@ -213,7 +213,7 @@ static int wsvqa_read_header(AVFormatContext *s,
AVFormatParameters *ap) AVFormatParameters *ap)
{ {
WsVqaDemuxContext *wsvqa = s->priv_data; WsVqaDemuxContext *wsvqa = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVStream *st; AVStream *st;
unsigned char *header; unsigned char *header;
unsigned char scratch[VQA_PREAMBLE_SIZE]; unsigned char scratch[VQA_PREAMBLE_SIZE];
@ -315,7 +315,7 @@ static int wsvqa_read_packet(AVFormatContext *s,
AVPacket *pkt) AVPacket *pkt)
{ {
WsVqaDemuxContext *wsvqa = s->priv_data; WsVqaDemuxContext *wsvqa = s->priv_data;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int ret = -1; int ret = -1;
unsigned char preamble[VQA_PREAMBLE_SIZE]; unsigned char preamble[VQA_PREAMBLE_SIZE];
unsigned int chunk_type; unsigned int chunk_type;

View File

@ -135,7 +135,7 @@ static int wv_read_block_header(AVFormatContext *ctx, ByteIOContext *pb)
static int wv_read_header(AVFormatContext *s, static int wv_read_header(AVFormatContext *s,
AVFormatParameters *ap) AVFormatParameters *ap)
{ {
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
WVContext *wc = s->priv_data; WVContext *wc = s->priv_data;
AVStream *st; AVStream *st;
@ -164,17 +164,17 @@ static int wv_read_packet(AVFormatContext *s,
WVContext *wc = s->priv_data; WVContext *wc = s->priv_data;
int ret; int ret;
if (url_feof(&s->pb)) if (url_feof(s->pb))
return AVERROR(EIO); return AVERROR(EIO);
if(wc->block_parsed){ if(wc->block_parsed){
if(wv_read_block_header(s, &s->pb) < 0) if(wv_read_block_header(s, s->pb) < 0)
return -1; return -1;
} }
if(av_new_packet(pkt, wc->blksize + WV_EXTRA_SIZE) < 0) if(av_new_packet(pkt, wc->blksize + WV_EXTRA_SIZE) < 0)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
memcpy(pkt->data, wc->extra, WV_EXTRA_SIZE); memcpy(pkt->data, wc->extra, WV_EXTRA_SIZE);
ret = get_buffer(&s->pb, pkt->data + WV_EXTRA_SIZE, wc->blksize); ret = get_buffer(s->pb, pkt->data + WV_EXTRA_SIZE, wc->blksize);
if(ret != wc->blksize){ if(ret != wc->blksize){
av_free_packet(pkt); av_free_packet(pkt);
return AVERROR(EIO); return AVERROR(EIO);
@ -204,18 +204,18 @@ static int wv_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp,
/* if found, seek there */ /* if found, seek there */
if (index >= 0){ if (index >= 0){
wc->block_parsed = 1; wc->block_parsed = 1;
url_fseek(&s->pb, st->index_entries[index].pos, SEEK_SET); url_fseek(s->pb, st->index_entries[index].pos, SEEK_SET);
return 0; return 0;
} }
/* if timestamp is out of bounds, return error */ /* if timestamp is out of bounds, return error */
if(timestamp < 0 || timestamp >= s->duration) if(timestamp < 0 || timestamp >= s->duration)
return -1; return -1;
pos = url_ftell(&s->pb); pos = url_ftell(s->pb);
do{ do{
ret = av_read_frame(s, pkt); ret = av_read_frame(s, pkt);
if (ret < 0){ if (ret < 0){
url_fseek(&s->pb, pos, SEEK_SET); url_fseek(s->pb, pos, SEEK_SET);
return -1; return -1;
} }
pts = pkt->pts; pts = pkt->pts;

View File

@ -87,7 +87,7 @@ static int yuv4_generate_header(AVFormatContext *s, char* buf)
static int yuv4_write_packet(AVFormatContext *s, AVPacket *pkt) static int yuv4_write_packet(AVFormatContext *s, AVPacket *pkt)
{ {
AVStream *st = s->streams[pkt->stream_index]; AVStream *st = s->streams[pkt->stream_index];
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
AVPicture *picture; AVPicture *picture;
int* first_pkt = s->priv_data; int* first_pkt = s->priv_data;
int width, height, h_chroma_shift, v_chroma_shift; int width, height, h_chroma_shift, v_chroma_shift;
@ -190,7 +190,7 @@ static int yuv4_read_header(AVFormatContext *s, AVFormatParameters *ap)
char header[MAX_YUV4_HEADER+10]; // Include headroom for the longest option char header[MAX_YUV4_HEADER+10]; // Include headroom for the longest option
char *tokstart,*tokend,*header_end; char *tokstart,*tokend,*header_end;
int i; int i;
ByteIOContext *pb = &s->pb; ByteIOContext *pb = s->pb;
int width=-1, height=-1, raten=0, rated=0, aspectn=0, aspectd=0; int width=-1, height=-1, raten=0, rated=0, aspectn=0, aspectd=0;
enum PixelFormat pix_fmt=PIX_FMT_NONE,alt_pix_fmt=PIX_FMT_NONE; enum PixelFormat pix_fmt=PIX_FMT_NONE,alt_pix_fmt=PIX_FMT_NONE;
AVStream *st; AVStream *st;
@ -344,7 +344,7 @@ static int yuv4_read_packet(AVFormatContext *s, AVPacket *pkt)
struct frame_attributes *s1 = s->priv_data; struct frame_attributes *s1 = s->priv_data;
for (i=0; i<MAX_FRAME_HEADER; i++) { for (i=0; i<MAX_FRAME_HEADER; i++) {
header[i] = get_byte(&s->pb); header[i] = get_byte(s->pb);
if (header[i] == '\n') { if (header[i] == '\n') {
header[i+1] = 0; header[i+1] = 0;
break; break;
@ -360,7 +360,7 @@ static int yuv4_read_packet(AVFormatContext *s, AVPacket *pkt)
if (packet_size < 0) if (packet_size < 0)
return -1; return -1;
if (av_get_packet(&s->pb, pkt, packet_size) != packet_size) if (av_get_packet(s->pb, pkt, packet_size) != packet_size)
return AVERROR(EIO); return AVERROR(EIO);
if (s->streams[0]->codec->coded_frame) { if (s->streams[0]->codec->coded_frame) {

View File

@ -538,7 +538,7 @@ int main(int argc, char **argv)
if (!(fmt->flags & AVFMT_NOFILE)) { if (!(fmt->flags & AVFMT_NOFILE)) {
/* close the output file */ /* close the output file */
url_fclose(&oc->pb); url_fclose(oc->pb);
} }
/* free the stream */ /* free the stream */