Lines Matching defs:fpc

162 static uint8_t *flac_fifo_read_wrap(FLACParseContext *fpc, int offset, int len,
165 FifoBuffer *f = &fpc->fifo_buf;
177 av_log(fpc->avctx, AV_LOG_ERROR,
314 static int find_headers_search_validate(FLACParseContext *fpc, int offset)
319 header_buf = flac_fifo_read_wrap(fpc, offset,
321 &fpc->wrap_buf,
322 &fpc->wrap_buf_allocated_size);
323 if (frame_header_is_valid(fpc->avctx, header_buf, &fi)) {
324 FLACHeaderMarker **end_handle = &fpc->headers;
335 av_log(fpc->avctx, AV_LOG_ERROR,
345 fpc->nb_headers_found++;
351 static int find_headers_search(FLACParseContext *fpc, uint8_t *buf,
359 int ret = find_headers_search_validate(fpc, search_start + i);
369 int ret = find_headers_search_validate(fpc, search_start + i + j);
378 static int find_new_headers(FLACParseContext *fpc, int search_start)
383 fpc->nb_headers_found = 0;
386 search_end = flac_fifo_size(&fpc->fifo_buf) - (MAX_FRAME_HEADER_SIZE - 1);
388 buf = flac_fifo_read(&fpc->fifo_buf, search_start, &read_len);
389 size = find_headers_search(fpc, buf, read_len, search_start);
400 buf = flac_fifo_read(&fpc->fifo_buf, search_start + 1, &read_len);
404 temp = find_headers_search_validate(fpc, search_start);
410 temp = find_headers_search(fpc, buf, read_len, search_start);
416 if (!size && fpc->headers)
417 for (end = fpc->headers; end; end = end->next)
422 static int check_header_fi_mismatch(FLACParseContext *fpc,
430 av_log(fpc->avctx, AV_LOG_WARNING + log_level_offset,
435 av_log(fpc->avctx, AV_LOG_WARNING + log_level_offset,
441 av_log(fpc->avctx, AV_LOG_WARNING + log_level_offset,
446 av_log(fpc->avctx, AV_LOG_WARNING + log_level_offset,
452 static int check_header_mismatch(FLACParseContext *fpc,
459 deduction = check_header_fi_mismatch(fpc, header_fi, child_fi,
490 av_log(fpc->avctx, AV_LOG_WARNING + log_level_offset,
529 buf = flac_fifo_read(&fpc->fifo_buf, start->offset, &read_len);
534 buf = flac_fifo_read(&fpc->fifo_buf, end->offset - read_len, &read_len);
541 av_log(fpc->avctx, AV_LOG_WARNING + log_level_offset,
560 static int score_header(FLACParseContext *fpc, FLACHeaderMarker *header)
570 if (fpc->last_fi_valid) {
572 base_score -= check_header_fi_mismatch(fpc, &fpc->last_fi, &header->fi,
584 header->link_penalty[dist] = check_header_mismatch(fpc, header,
587 child_score = score_header(fpc, child) - header->link_penalty[dist];
600 static void score_sequences(FLACParseContext *fpc)
605 for (curr = fpc->headers; curr; curr = curr->next)
609 for (curr = fpc->headers; curr; curr = curr->next) {
610 if (score_header(fpc, curr) > best_score) {
611 fpc->best_header = curr;
617 static int get_best_header(FLACParseContext *fpc, const uint8_t **poutbuf,
620 FLACHeaderMarker *header = fpc->best_header;
623 *poutbuf_size = flac_fifo_size(&fpc->fifo_buf) - header->offset;
628 check_header_mismatch(fpc, header, child, 0);
631 ff_flac_set_channel_layout(fpc->avctx, header->fi.channels);
633 fpc->avctx->sample_rate = header->fi.samplerate;
634 fpc->pc->duration = header->fi.blocksize;
635 *poutbuf = flac_fifo_read_wrap(fpc, header->offset, *poutbuf_size,
636 &fpc->wrap_buf,
637 &fpc->wrap_buf_allocated_size);
639 if (fpc->pc->flags & PARSER_FLAG_USE_CODEC_TS) {
641 fpc->pc->pts = header->fi.frame_or_sample_num;
643 fpc->pc->pts = header->fi.frame_or_sample_num * header->fi.blocksize;
646 fpc->best_header_valid = 0;
647 fpc->last_fi_valid = 1;
648 fpc->last_fi = header->fi;
653 return child->offset - flac_fifo_size(&fpc->fifo_buf);
661 FLACParseContext *fpc = s->priv_data;
673 if (fpc->pc->flags & PARSER_FLAG_USE_CODEC_TS) {
674 fpc->pc->pts = fi.frame_or_sample_num;
676 fpc->pc->pts *= fi.blocksize;
684 fpc->avctx = avctx;
685 if (fpc->best_header_valid)
686 return get_best_header(fpc, poutbuf, poutbuf_size);
689 if (fpc->best_header && fpc->best_header->best_child) {
691 FLACHeaderMarker *best_child = fpc->best_header->best_child;
694 for (curr = fpc->headers; curr != best_child; curr = temp) {
695 if (curr != fpc->best_header) {
702 fpc->nb_headers_buffered--;
705 flac_fifo_drain(&fpc->fifo_buf, best_child->offset);
712 fpc->headers = best_child;
713 if (fpc->nb_headers_buffered >= FLAC_MIN_HEADERS) {
714 fpc->best_header = best_child;
715 return get_best_header(fpc, poutbuf, poutbuf_size);
717 fpc->best_header = NULL;
718 } else if (fpc->best_header) {
722 for (curr = fpc->headers; curr != fpc->best_header; curr = temp) {
725 fpc->nb_headers_buffered--;
727 fpc->headers = fpc->best_header->next;
728 av_freep(&fpc->best_header);
729 fpc->nb_headers_buffered--;
737 fpc->nb_headers_buffered < FLAC_MIN_HEADERS)
738 || (!buf_size && !fpc->end_padded)) {
743 fpc->end_padded = 1;
748 int nb_desired = FLAC_MIN_HEADERS - fpc->nb_headers_buffered + 1;
753 if (!flac_fifo_space(&fpc->fifo_buf) &&
754 flac_fifo_size(&fpc->fifo_buf) / FLAC_AVG_FRAME_SIZE >
755 fpc->nb_headers_buffered * 20) {
764 ret = flac_fifo_write(&fpc->fifo_buf, read_start,
768 ret = flac_fifo_write(&fpc->fifo_buf, pad, sizeof(pad));
776 start_offset = flac_fifo_size(&fpc->fifo_buf) -
779 nb_headers = find_new_headers(fpc, start_offset);
787 fpc->nb_headers_buffered = nb_headers;
789 if (!fpc->end_padded && fpc->nb_headers_buffered < FLAC_MIN_HEADERS) {
799 if (fpc->end_padded || fpc->nb_headers_found)
800 score_sequences(fpc);
803 if (fpc->end_padded) {
804 int empty = flac_fifo_size(&fpc->fifo_buf) == MAX_FRAME_HEADER_SIZE;
805 int warp = fpc->fifo_buf.wptr - fpc->fifo_buf.buffer < MAX_FRAME_HEADER_SIZE;
807 fpc->fifo_buf.wptr -= MAX_FRAME_HEADER_SIZE;
809 fpc->fifo_buf.wptr += fpc->fifo_buf.end -
810 fpc->fifo_buf.buffer;
812 fpc->fifo_buf.empty = empty;
817 for (curr = fpc->headers; curr; curr = curr->next) {
818 if (!fpc->best_header || curr->max_score > fpc->best_header->max_score) {
819 fpc->best_header = curr;
823 if (fpc->best_header && fpc->best_header->max_score <= 0) {
825 if (!buf_size || read_end != buf || fpc->nb_headers_buffered < FLAC_MIN_HEADERS)
826 fpc->best_header = NULL;
829 if (fpc->best_header) {
830 fpc->best_header_valid = 1;
831 if (fpc->best_header->offset > 0) {
834 fpc->best_header->offset);
838 *poutbuf_size = fpc->best_header->offset;
839 *poutbuf = flac_fifo_read_wrap(fpc, 0, *poutbuf_size,
840 &fpc->wrap_buf,
841 &fpc->wrap_buf_allocated_size);
842 return buf_size ? (read_end - buf) : (fpc->best_header->offset -
843 flac_fifo_size(&fpc->fifo_buf));
846 return get_best_header(fpc, poutbuf, poutbuf_size);
857 FLACParseContext *fpc = c->priv_data;
860 fpc->pc = c;
863 ret = flac_fifo_alloc(&fpc->fifo_buf, (FLAC_MIN_HEADERS + 3) * FLAC_AVG_FRAME_SIZE);
865 av_log(fpc->avctx, AV_LOG_ERROR,
874 FLACParseContext *fpc = c->priv_data;
875 FLACHeaderMarker *curr = fpc->headers, *temp;
882 fpc->headers = NULL;
883 flac_fifo_free(&fpc->fifo_buf);
884 av_freep(&fpc->wrap_buf);