comparison ffm.c @ 2771:d52c718e83f9 libavformat

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
author andoma
date Wed, 21 Nov 2007 07:41:00 +0000
parents 3427d0c63a32
children 75d64cb5ee6c
comparison
equal deleted inserted replaced
2770:a7e42cf4b364 2771:d52c718e83f9
62 #ifdef CONFIG_MUXERS 62 #ifdef CONFIG_MUXERS
63 static void flush_packet(AVFormatContext *s) 63 static void flush_packet(AVFormatContext *s)
64 { 64 {
65 FFMContext *ffm = s->priv_data; 65 FFMContext *ffm = s->priv_data;
66 int fill_size, h; 66 int fill_size, h;
67 ByteIOContext *pb = &s->pb; 67 ByteIOContext *pb = s->pb;
68 68
69 fill_size = ffm->packet_end - ffm->packet_ptr; 69 fill_size = ffm->packet_end - ffm->packet_ptr;
70 memset(ffm->packet_ptr, 0, fill_size); 70 memset(ffm->packet_ptr, 0, fill_size);
71 71
72 if (url_ftell(pb) % ffm->packet_size) 72 if (url_ftell(pb) % ffm->packet_size)
126 static int ffm_write_header(AVFormatContext *s) 126 static int ffm_write_header(AVFormatContext *s)
127 { 127 {
128 FFMContext *ffm = s->priv_data; 128 FFMContext *ffm = s->priv_data;
129 AVStream *st; 129 AVStream *st;
130 FFMStream *fst; 130 FFMStream *fst;
131 ByteIOContext *pb = &s->pb; 131 ByteIOContext *pb = s->pb;
132 AVCodecContext *codec; 132 AVCodecContext *codec;
133 int bit_rate, i; 133 int bit_rate, i;
134 134
135 ffm->packet_size = FFM_PACKET_SIZE; 135 ffm->packet_size = FFM_PACKET_SIZE;
136 136
276 return 0; 276 return 0;
277 } 277 }
278 278
279 static int ffm_write_trailer(AVFormatContext *s) 279 static int ffm_write_trailer(AVFormatContext *s)
280 { 280 {
281 ByteIOContext *pb = &s->pb; 281 ByteIOContext *pb = s->pb;
282 FFMContext *ffm = s->priv_data; 282 FFMContext *ffm = s->priv_data;
283 283
284 /* flush packets */ 284 /* flush packets */
285 if (ffm->packet_ptr > ffm->packet) 285 if (ffm->packet_ptr > ffm->packet)
286 flush_packet(s); 286 flush_packet(s);
312 if (!ffm_nopts) { 312 if (!ffm_nopts) {
313 /* XXX: I don't understand this test, so I disabled it for testing */ 313 /* XXX: I don't understand this test, so I disabled it for testing */
314 if (size <= len) 314 if (size <= len)
315 return 1; 315 return 1;
316 } 316 }
317 pos = url_ftell(&s->pb); 317 pos = url_ftell(s->pb);
318 if (pos == ffm->write_index) { 318 if (pos == ffm->write_index) {
319 /* exactly at the end of stream */ 319 /* exactly at the end of stream */
320 return 0; 320 return 0;
321 } else if (pos < ffm->write_index) { 321 } else if (pos < ffm->write_index) {
322 avail_size = ffm->write_index - pos; 322 avail_size = ffm->write_index - pos;
333 /* first is true if we read the frame header */ 333 /* first is true if we read the frame header */
334 static int ffm_read_data(AVFormatContext *s, 334 static int ffm_read_data(AVFormatContext *s,
335 uint8_t *buf, int size, int first) 335 uint8_t *buf, int size, int first)
336 { 336 {
337 FFMContext *ffm = s->priv_data; 337 FFMContext *ffm = s->priv_data;
338 ByteIOContext *pb = &s->pb; 338 ByteIOContext *pb = s->pb;
339 int len, fill_size, size1, frame_offset; 339 int len, fill_size, size1, frame_offset;
340 340
341 size1 = size; 341 size1 = size;
342 while (size > 0) { 342 while (size > 0) {
343 redo: 343 redo:
391 391
392 392
393 static void adjust_write_index(AVFormatContext *s) 393 static void adjust_write_index(AVFormatContext *s)
394 { 394 {
395 FFMContext *ffm = s->priv_data; 395 FFMContext *ffm = s->priv_data;
396 ByteIOContext *pb = &s->pb; 396 ByteIOContext *pb = s->pb;
397 int64_t pts; 397 int64_t pts;
398 //offset_t orig_write_index = ffm->write_index; 398 //offset_t orig_write_index = ffm->write_index;
399 offset_t pos_min, pos_max; 399 offset_t pos_min, pos_max;
400 int64_t pts_start; 400 int64_t pts_start;
401 offset_t ptr = url_ftell(pb); 401 offset_t ptr = url_ftell(pb);
450 static int ffm_read_header(AVFormatContext *s, AVFormatParameters *ap) 450 static int ffm_read_header(AVFormatContext *s, AVFormatParameters *ap)
451 { 451 {
452 FFMContext *ffm = s->priv_data; 452 FFMContext *ffm = s->priv_data;
453 AVStream *st; 453 AVStream *st;
454 FFMStream *fst; 454 FFMStream *fst;
455 ByteIOContext *pb = &s->pb; 455 ByteIOContext *pb = s->pb;
456 AVCodecContext *codec; 456 AVCodecContext *codec;
457 int i, nb_streams; 457 int i, nb_streams;
458 uint32_t tag; 458 uint32_t tag;
459 459
460 /* header */ 460 /* header */
583 if (!ffm_is_avail_data(s, FRAME_HEADER_SIZE)) { 583 if (!ffm_is_avail_data(s, FRAME_HEADER_SIZE)) {
584 return AVERROR(EAGAIN); 584 return AVERROR(EAGAIN);
585 } 585 }
586 #if 0 586 #if 0
587 printf("pos=%08"PRIx64" spos=%"PRIx64", write_index=%"PRIx64" size=%"PRIx64"\n", 587 printf("pos=%08"PRIx64" spos=%"PRIx64", write_index=%"PRIx64" size=%"PRIx64"\n",
588 url_ftell(&s->pb), s->pb.pos, ffm->write_index, ffm->file_size); 588 url_ftell(s->pb), s->pb.pos, ffm->write_index, ffm->file_size);
589 #endif 589 #endif
590 if (ffm_read_data(s, ffm->header, FRAME_HEADER_SIZE, 1) != 590 if (ffm_read_data(s, ffm->header, FRAME_HEADER_SIZE, 1) !=
591 FRAME_HEADER_SIZE) 591 FRAME_HEADER_SIZE)
592 return AVERROR(EAGAIN); 592 return AVERROR(EAGAIN);
593 #if 0 593 #if 0
608 608
609 duration = AV_RB24(ffm->header + 5); 609 duration = AV_RB24(ffm->header + 5);
610 610
611 av_new_packet(pkt, size); 611 av_new_packet(pkt, size);
612 pkt->stream_index = ffm->header[0]; 612 pkt->stream_index = ffm->header[0];
613 pkt->pos = url_ftell(&s->pb); 613 pkt->pos = url_ftell(s->pb);
614 if (ffm->header[1] & FLAG_KEY_FRAME) 614 if (ffm->header[1] & FLAG_KEY_FRAME)
615 pkt->flags |= PKT_FLAG_KEY; 615 pkt->flags |= PKT_FLAG_KEY;
616 616
617 ffm->read_state = READ_HEADER; 617 ffm->read_state = READ_HEADER;
618 if (ffm_read_data(s, pkt->data, size, 0) != size) { 618 if (ffm_read_data(s, pkt->data, size, 0) != size) {
636 /* pos is between 0 and file_size - FFM_PACKET_SIZE. It is translated 636 /* pos is between 0 and file_size - FFM_PACKET_SIZE. It is translated
637 by the write position inside this function */ 637 by the write position inside this function */
638 static void ffm_seek1(AVFormatContext *s, offset_t pos1) 638 static void ffm_seek1(AVFormatContext *s, offset_t pos1)
639 { 639 {
640 FFMContext *ffm = s->priv_data; 640 FFMContext *ffm = s->priv_data;
641 ByteIOContext *pb = &s->pb; 641 ByteIOContext *pb = s->pb;
642 offset_t pos; 642 offset_t pos;
643 643
644 pos = pos1 + ffm->write_index; 644 pos = pos1 + ffm->write_index;
645 if (pos >= ffm->file_size) 645 if (pos >= ffm->file_size)
646 pos -= (ffm->file_size - FFM_PACKET_SIZE); 646 pos -= (ffm->file_size - FFM_PACKET_SIZE);
650 url_fseek(pb, pos, SEEK_SET); 650 url_fseek(pb, pos, SEEK_SET);
651 } 651 }
652 652
653 static int64_t get_pts(AVFormatContext *s, offset_t pos) 653 static int64_t get_pts(AVFormatContext *s, offset_t pos)
654 { 654 {
655 ByteIOContext *pb = &s->pb; 655 ByteIOContext *pb = s->pb;
656 int64_t pts; 656 int64_t pts;
657 657
658 ffm_seek1(s, pos); 658 ffm_seek1(s, pos);
659 url_fskip(pb, 4); 659 url_fskip(pb, 4);
660 pts = get_be64(pb); 660 pts = get_be64(pb);