GNOME Bugzilla – Bug 497964
theoraenc test fails
Last modified: 2008-01-14 17:36:07 UTC
This is on Mandriva Cooker with gstreamer 0.10.15 and theora 1.0beta2: Running suite(s): theoraenc OIL: ERROR liboiltest.c 403: oil_test_check_impl(): function sad8x8_8xn_u8_psadbw in class sad8x8_8xn_u8 failed check (247115 > 0) || (outside=0) OIL: ERROR liboiltest.c 403: oil_test_check_impl(): function sad8x8_8xn_u8_psadbw in class sad8x8_8xn_u8 failed check (247115 > 0) || (outside=0) OIL: ERROR liboiltest.c 403: oil_test_check_impl(): function sad8x8_8xn_u8_psadbw in class sad8x8_8xn_u8 failed check (247115 > 0) || (outside=0) 33%: Checks: 3, Failures: 2, Errors: 0 pipelines/theoraenc.c:58:F:general:tf:0: expected duration 0:00:00.100000000, but got duration 0:00:00.200000000 pipelines/theoraenc.c:58:F:general:tf:0: expected duration 0:00:00.100000000, but got duration 0:00:00.200000000 FAIL: pipelines/theoraenc All other tests pass.
Same here with theora 1.0beta2
Might be due to libtheora 1.0beta1 (2007 September 22) - Granulepos scheme modified to match other codecs. This bumps the bitstream revision to 3.2.1. Bitstreams marked 3.2.0 are handled correctly by this decoder. Older decoders will show a one frame sync error in the less noticable direction.
If I understand that correctly this means, that theoradec needs a different granulepos<->time conversion if running with libtheora before 1.0beta1 and if running with libtheora after 1.0beta1, right?
Of course I meant theoraenc... but is theoradec/theoraparse also affected when decoding new files?
Marking as blocker for the next base release so this isn't forgotten...
Created attachment 102305 [details] [review] partial fix With this, it fails somewhere else now (probably BUFFER_OFFSET and/or BUFFER_OFFSET_END need tinkering with too).
So the granulepos meaning only changed for encoding? I thought, knowing nothing about the Ogg/Theora internals, that the granulepos is something in the bytestream and if it changes for encoding it should be handled differently for decoding/parsing/demuxing too... well, you probably know better :)
We need someone that knows the details of the granulepos to comment, and possibly even to fix the test :) MikeS, thomasvs?
Fixed with: * ext/theora/theoradec.c: (gst_theora_dec_class_init), (_theora_granule_frame), (_theora_granule_start_time), (theora_dec_sink_convert), (theora_dec_decode_buffer): Adapt for post-alpha meaning of granulepos, when we have a newer version of libtheora. * ext/theora/theoraenc.c: (gst_theora_enc_class_init), (theora_enc_get_ogg_packet_end_time), (theora_enc_sink_event), (theora_enc_is_discontinuous), (theora_enc_chain): Likewise. * tests/check/Makefile.am: Link libtheora into theoraenc test so we can check which version of libtheora we're testing against. * tests/check/pipelines/theoraenc.c: (check_libtheora), (check_buffer_granulepos), (check_buffer_granulepos_from_starttime), (GST_START_TEST), (theoraenc_suite): Adapt tests to check the values that are now defined for theora; make the tests backwards-adapt the passed values if we're running against an old libtheora. Fixes #497964
Isn't the same fix missing in theoraparse now?
According to Michael theoraparse probably needs the fix too... someone with more theora/ogg knowledge than me should probably investigate before next base release :)
Fixed in CVS: 2008-01-14 Jan Schmidt <jan.schmidt@sun.com> * ext/theora/gsttheoradec.h: * ext/theora/gsttheoraparse.h: * ext/theora/theoradec.c: * ext/theora/theoraparse.c: Take a 2nd stab at handling libtheora granulepos changes in the decoder and parser by inspecting the bitstream version of the incoming data.