mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-01-21 14:53:10 +00:00
lavf/prompeg: prompeg_write() must report data all was written
Previously, prompeg_write() would only report to caller that bytes we written when a FEC packet was actually created. Not all RTP packets are expected to generate a FEC packet however, so this behavior was causing avio to retry writing the RTP packet, eventually forcing the FEC state machine to send a FEC packet erroneously (and so breaking out of the retry loop). This was resulting in incorrect FEC data being generated, and far too many FEC packets to be sent (~100% FEC overhead). fix #7863 Signed-off-by: David Holroyd <david.holroyd@m2amedia.tv>
This commit is contained in:
parent
0a0158e45d
commit
ffc1208266
@ -387,7 +387,7 @@ static int prompeg_write(URLContext *h, const uint8_t *buf, int size) {
|
|||||||
PrompegFec *fec_tmp;
|
PrompegFec *fec_tmp;
|
||||||
uint8_t *bitstring = NULL;
|
uint8_t *bitstring = NULL;
|
||||||
int col_idx, col_out_idx, row_idx;
|
int col_idx, col_out_idx, row_idx;
|
||||||
int ret, written = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (s->init && ((ret = prompeg_init(h, buf, size)) < 0))
|
if (s->init && ((ret = prompeg_init(h, buf, size)) < 0))
|
||||||
goto end;
|
goto end;
|
||||||
@ -403,7 +403,6 @@ static int prompeg_write(URLContext *h, const uint8_t *buf, int size) {
|
|||||||
if (!s->first || s->packet_idx > 0) {
|
if (!s->first || s->packet_idx > 0) {
|
||||||
if ((ret = prompeg_write_fec(h, s->fec_row, PROMPEG_FEC_ROW)) < 0)
|
if ((ret = prompeg_write_fec(h, s->fec_row, PROMPEG_FEC_ROW)) < 0)
|
||||||
goto end;
|
goto end;
|
||||||
written += ret;
|
|
||||||
}
|
}
|
||||||
memcpy(s->fec_row->bitstring, bitstring, s->bitstring_size);
|
memcpy(s->fec_row->bitstring, bitstring, s->bitstring_size);
|
||||||
s->fec_row->sn = AV_RB16(buf + 2);
|
s->fec_row->sn = AV_RB16(buf + 2);
|
||||||
@ -434,7 +433,6 @@ static int prompeg_write(URLContext *h, const uint8_t *buf, int size) {
|
|||||||
col_out_idx = s->packet_idx / s->d;
|
col_out_idx = s->packet_idx / s->d;
|
||||||
if ((ret = prompeg_write_fec(h, s->fec_col[col_out_idx], PROMPEG_FEC_COL)) < 0)
|
if ((ret = prompeg_write_fec(h, s->fec_col[col_out_idx], PROMPEG_FEC_COL)) < 0)
|
||||||
goto end;
|
goto end;
|
||||||
written += ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (++s->packet_idx >= s->packet_idx_max) {
|
if (++s->packet_idx >= s->packet_idx_max) {
|
||||||
@ -443,7 +441,7 @@ static int prompeg_write(URLContext *h, const uint8_t *buf, int size) {
|
|||||||
s->first = 0;
|
s->first = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = written;
|
ret = size;
|
||||||
|
|
||||||
end:
|
end:
|
||||||
av_free(bitstring);
|
av_free(bitstring);
|
||||||
|
Loading…
Reference in New Issue
Block a user