On 05/03/2014 04:00 PM, Wout Mertens wrote:
> Hi,
>
> I noticed that Handbrake patches libbluray with the patch below, and it
> applies cleanly. A candidate for inclusion? I
> must admit I have no idea what it does.
>
> Cheers,
>
> Wout.
>
> diff --git a/src/libbluray/bdnav/navigation.c
> b/src/libbluray/bdnav/navigation.c
> index c8dc307..26d0000 100644
> --- a/src/libbluray/bdnav/navigation.c
> +++ b/src/libbluray/bdnav/navigation.c
> @@ -32,9 +32,25 @@
> #include <stdlib.h>
> #include <string.h>
>
> +static int _stream_cmp(MPLS_STREAM *a, MPLS_STREAM *b)
> +{
> + if (a->stream_type == b->stream_type &&
> + a->coding_type == b->coding_type &&
> + a->pid == b->pid &&
> + a->subpath_id == b->subpath_id &&
> + a->subclip_id == b->subclip_id &&
> + a->format == b->format &&
> + a->rate == b->rate &&
> + a->char_code == b->char_code &&
> + memcmp(a->lang, b->lang, 4) == 0) {
> + return 1;
> + }
> + return 0;
> +}
> +
> static int _filter_dup(MPLS_PL *pl_list[], unsigned count, MPLS_PL *pl)
> {
> - unsigned ii, jj;
> + unsigned ii, jj, kk;
>
> for (ii = 0; ii < count; ii++) {
> if (pl->list_count != pl_list[ii]->list_count) {
> @@ -54,7 +70,48 @@ static int _filter_dup(MPLS_PL *pl_list[], unsigned count,
> MPLS_PL *pl)
> pi1->out_time != pi2->out_time) {
> break;
> }
> + if (pi1->stn.num_video != pi2->stn.num_video
> ||
> + pi1->stn.num_audio != pi2->stn.num_audio
> ||
> + pi1->stn.num_pg != pi2->stn.num_pg
> ||
> + pi1->stn.num_ig != pi2->stn.num_ig
> ||
> + pi1->stn.num_secondary_audio != pi2->stn.num_secondary_audio
> ||
> + pi1->stn.num_secondary_video !=
> pi2->stn.num_secondary_video) {
> + break;
> + }
> + for (kk = 0; kk < pi1->stn.num_video; kk++) {
> + if (!_stream_cmp(&pi1->stn.video[kk], &pi2->stn.video[kk])) {
> + goto next;
> + }
> + }
> + for (kk = 0; kk < pi1->stn.num_audio; kk++) {
> + if (!_stream_cmp(&pi1->stn.audio[kk], &pi2->stn.audio[kk])) {
> + goto next;
> + }
> + }
> + for (kk = 0; kk < pi1->stn.num_pg; kk++) {
> + if (!_stream_cmp(&pi1->stn.pg <http://stn.pg/>[kk],
> &pi2->stn.pg <http://stn.pg/>[kk])) {
> + goto next;
> + }
> + }
> + for (kk = 0; kk < pi1->stn.num_ig; kk++) {
> + if (!_stream_cmp(&pi1->stn.ig[kk], &pi2->stn.ig[kk])) {
> + goto next;
> + }
> + }
> + for (kk = 0; kk < pi1->stn.num_secondary_audio; kk++) {
> + if (!_stream_cmp(&pi1->stn.secondary_audio[kk],
> + &pi2->stn.secondary_audio[kk])) {
> + goto next;
> + }
> + }
> + for (kk = 0; kk < pi1->stn.num_secondary_video; kk++) {
> + if (!_stream_cmp(&pi1->stn.secondary_video[kk],
> + &pi2->stn.secondary_video[kk])) {
> + goto next;
> + }
> + }
> }
> +next:
> if (jj != pl->list_count) {
> continue;
> }
>
>Hi, It fixes a problem with the original implementation of _filter_dup. The original implementation is very simple and only checks a few things to decide if a title is a duplicate of another title. This resulted in false positive matches and filtering out of the title that was needed. This patch adds comparisons for more fields in the playlist to prevent these false positive matches. -- John GnuPG fingerprint: D0EC B3DB C372 D1F1 0B01 83F0 49F1 D7B2 60D4 D0F7
signature.asc
Description: OpenPGP digital signature
_______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
