#4326 closed defect (fixed)
ffplay does not show dvb subtitles
| Reported by: | banastasov | Owned by: | |
|---|---|---|---|
| Priority: | important | Component: | avcodec |
| Version: | git-master | Keywords: | dvbsub regression |
| Cc: | Michael Niedermayer | Blocked By: | |
| Blocking: | Reproduced by developer: | yes | |
| Analyzed by developer: | no |
Description
Summary of the bug:ffplay does not show dvb subtitles
There is a problem introduced after adding error codes in
libavcodec/dvbsubdec.c
The first commit introducing the error codes is:
commit 1bf747ae84fc7b1339ab4459d9d9ba2e9c341616
Author: Michael Niedermayer <michaelni@gmx.at>
Date: Sat Jan 10 19:24:27 2015 +0100
avcodec/dvbsubdec: Return proper error codes from more functions
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
It adds this:
@@ -1478,7 +1481,7 @@ static void dvbsub_parse_display_definition_segment(AVCodecContext *avctx,
}
if (buf_size < 13)
- return;
+ return 0;
if (info_byte & 1<<3) { // display_window_flag
display_def->x = bytestream_get_be16(&buf);
which later is changed from another commit:
commit 607ad990d31e6be52980970e5ce8cd25ab3de812
Author: Vittorio Giovara <vittorio.giovara@gmail.com>
Date: Wed Dec 17 16:02:09 2014 +0100
dvbsubdec: check memory allocations and propagate errors
to:
@@ -1279,7 +1300,7 @@ static void dvbsub_parse_display_definition_segment(AVCodecContext *avctx,
display_def->height = bytestream_get_be16(&buf) + 1;
if (buf_size < 13)
- return;
+ return AVERROR_INVALIDDATA;
if (info_byte & 1<<3) { // display_window_flag
display_def->x = bytestream_get_be16(&buf);
This does not work, because now the check is not correct.
It should check buf_size only if the next 'if' is fulfilled:
if (info_byte & 1<<3)
Only then the additional 8 bytes are needed.
I have added debug to see if the 'if' is fulfilled, but it is not, at least for my files, and the buf_size is always 5 bytes, which triggers the ret < 0 error.
Because of this change dvb subtitles are not displayed.
The size check should be in the 'if', something like:
if (info_byte & 1<<3) { // display_window_flag
if (buf_size < 13)
return AVERROR_INVALIDDATA;
display_def->x = bytestream_get_be16(&buf);
display_def->width = bytestream_get_be16(&buf) - display_def->x + 1;
display_def->y = bytestream_get_be16(&buf);
display_def->height = bytestream_get_be16(&buf) - display_def->y + 1;
}
Change History (5)
comment:1 by , 11 years ago
comment:2 by , 11 years ago
| Cc: | added |
|---|---|
| Resolution: | → fixed |
| Status: | new → closed |
Suggested change made in debf4d6e67dfb29f3d71683add429c588828f8e8
iam still interrested in a testcase though if you can share one of your samples
comment:3 by , 11 years ago
| Component: | undetermined → avcodec |
|---|---|
| Keywords: | dvbsub added |
| Version: | unspecified → git-master |
comment:4 by , 11 years ago
Sorry about the delay.
I have uploaded two files:
dvbsub_ticket4326_working.ts - working without this patch
dvbsub_ticket4326_not_working.ts - NOT working without this patch
so you can test with or without the patch.
comment:5 by , 11 years ago
| Keywords: | regression added |
|---|---|
| Priority: | normal → important |
| Reproduced by developer: | set |
Regression since c5b6b711b291f7cc3fc215de43896537cb7cfa44



can you upload one of your files / provide a testcase ?