-
- if( p_sys->p_mask )
- {
- plane_t *p_mask = p_sys->p_mask->p+A_PLANE;
- plane_t *p_apic = p_new_pic->p+A_PLANE;
- if( p_mask->i_visible_pitch
- != p_apic->i_visible_pitch
- || p_mask->i_visible_lines
- != p_apic->i_visible_lines )
- {
- msg_Warn( p_stream,
- "Mask size (%d x %d) and image size (%d x %d) "
- "don't match. The mask will not be applied.",
- p_mask->i_visible_pitch,
- p_mask->i_visible_lines,
- p_apic->i_visible_pitch,
- p_apic->i_visible_lines );
- }
- else
- {
- if( p_mask->i_pitch != p_apic->i_pitch
- || p_mask->i_lines != p_apic->i_lines )
- {
- /* visible plane sizes match ... but not the undelying
- * buffer. I'm not sure that this can happen,
- * but better safe than sorry. */
- int i_line;
- int i_lines = p_mask->i_visible_lines;
- uint8_t *p_src = p_mask->p_pixels;
- uint8_t *p_dst = p_apic->p_pixels;
- int i_src_pitch = p_mask->i_pitch;
- int i_dst_pitch = p_apic->i_pitch;
- int i_visible_pitch = p_mask->i_visible_pitch;
- for( i_line = 0; i_line < i_lines; i_line++,
- p_src += i_src_pitch, p_dst += i_dst_pitch )
- {
- p_stream->p_libvlc->pf_memcpy(
- p_dst, p_src, i_visible_pitch );
- }
- }
- else
- {
- /* plane sizes match */
- p_stream->p_libvlc->pf_memcpy(
- p_apic->p_pixels, p_mask->p_pixels,
- p_mask->i_pitch * p_mask->i_lines );
- }
- }
- vlc_mutex_unlock( &p_sys->mask_lock );
- }