@@ -454,8 +454,8 @@ struct video_buffer_ops {
454454 * @assume(__lock->_vrl_rect.vcr_ydim > 0);
455455 * @assume((__lock->_vrl_rect.vcr_xmin + __lock->_vrl_rect.vcr_xdim) > __lock->_vrl_rect.vcr_xmin);
456456 * @assume((__lock->_vrl_rect.vcr_ymin + __lock->_vrl_rect.vcr_ydim) > __lock->_vrl_rect.vcr_ymin);
457- * @assume((__lock->_vrl_rect.vcr_xmin + __lock->_vrl_rect.vcr_xdim) <= __self->vb_xdim );
458- * @assume((__lock->_vrl_rect.vcr_ymin + __lock->_vrl_rect.vcr_ydim) <= __self->vb_ydim );
457+ * @assume((__lock->_vrl_rect.vcr_xmin + __lock->_vrl_rect.vcr_xdim) <= video_buffer_getxdim( __self) );
458+ * @assume((__lock->_vrl_rect.vcr_ymin + __lock->_vrl_rect.vcr_ydim) <= video_buffer_getydim( __self) );
459459 *
460460 * @return: 0: Success
461461 * @return: -1: Error (s.a. `errno') */
@@ -472,8 +472,8 @@ struct video_buffer_ops {
472472 * @assume(__lock->_vrl_rect.vcr_ydim > 0);
473473 * @assume((__lock->_vrl_rect.vcr_xmin + __lock->_vrl_rect.vcr_xdim) > __lock->_vrl_rect.vcr_xmin);
474474 * @assume((__lock->_vrl_rect.vcr_ymin + __lock->_vrl_rect.vcr_ydim) > __lock->_vrl_rect.vcr_ymin);
475- * @assume((__lock->_vrl_rect.vcr_xmin + __lock->_vrl_rect.vcr_xdim) <= __self->vb_xdim );
476- * @assume((__lock->_vrl_rect.vcr_ymin + __lock->_vrl_rect.vcr_ydim) <= __self->vb_ydim );
475+ * @assume((__lock->_vrl_rect.vcr_xmin + __lock->_vrl_rect.vcr_xdim) <= video_buffer_getxdim( __self) );
476+ * @assume((__lock->_vrl_rect.vcr_ymin + __lock->_vrl_rect.vcr_ydim) <= video_buffer_getydim( __self) );
477477 *
478478 * @return: 0: Success
479479 * @return: -1: Error (s.a. `errno') */
@@ -486,11 +486,11 @@ struct video_buffer_ops {
486486 __NOTHROW_T (LIBVIDEO_GFX_FCC * vi_unlockregion )(struct video_buffer * __restrict __self ,
487487 struct video_regionlock * __restrict __lock );
488488
489- /* Create a new hard subregion-proxy of `__self'. The caller is responsible to ensure
490- * that the given `__rect' does not exceed `__self->vb_xdim' / `__self->vb_ydim'. Note
491- * that this function behaves slightly different from `video_surface_region()', in that
492- * the later accepts a signed rect, while also allowing said rect to be greater than
493- * the dimensions of the original buffer.
489+ /* Create a new hard subregion-proxy of `__self'. The caller is responsible to ensure
490+ * that the given `__rect' does not exceed `video_buffer_get[xy]dim( __self)'. Note
491+ * that this function behaves slightly different from `video_surface_region()', in
492+ * that the later accepts a signed rect, while also allowing said rect to be greater
493+ * than the dimensions of the original buffer.
494494 *
495495 * On the other hand, this function only works for creating **true** sub-rects, but
496496 * since this one is implemented by individual buffers, it is probably faster, too.
@@ -613,8 +613,8 @@ video_buffer_unlock(struct video_buffer *__self, struct video_lock *__lock);
613613 * @assume(__ydim > 0);
614614 * @assume((__xmin + __xdim) > __xmin);
615615 * @assume((__ymin + __ydim) > __ymin);
616- * @assume((__xmin + __xdim) <= __self->vb_xdim );
617- * @assume((__ymin + __ydim) <= __self->vb_ydim );
616+ * @assume((__xmin + __xdim) <= video_buffer_getxdim( __self) );
617+ * @assume((__ymin + __ydim) <= video_buffer_getydim( __self) );
618618 *
619619 * @return: 0: Success
620620 * @return: -1: Error (s.a. `errno') */
@@ -632,8 +632,8 @@ video_buffer_rlockregion(struct video_buffer *__self, struct video_regionlock *_
632632 * @assume(__ydim > 0);
633633 * @assume((__xmin + __xdim) > __xmin);
634634 * @assume((__ymin + __ydim) > __ymin);
635- * @assume((__xmin + __xdim) <= __self->vb_xdim );
636- * @assume((__ymin + __ydim) <= __self->vb_ydim );
635+ * @assume((__xmin + __xdim) <= video_buffer_getxdim( __self) );
636+ * @assume((__ymin + __ydim) <= video_buffer_getydim( __self) );
637637 *
638638 * @return: 0: Success
639639 * @return: -1: Error (s.a. `errno') */
@@ -755,24 +755,41 @@ struct video_buffer {
755755
756756/* Acquire/release references to sub-objects that any (initialized) buffer must hold */
757757#ifdef LIBVIDEO_GFX_EXPOSE_INTERNALS
758- #define __video_buffer_setsubregion (self , parent_surface , parent_buffer ) \
759- (void)((self)->vb_surf.vs_pal = (parent_surface)->vs_pal, \
760- (self)->vb_surf.vs_flags = (parent_surface)->vs_flags, \
761- (self)->vb_surf.vs_colorkey = (parent_surface)->vs_colorkey, \
762- (self)->vb_codec = (parent_buffer)->vb_codec)
763- #define __video_buffer_setformat (self , format ) \
764- (void)((self)->vb_surf.vs_pal = (format)->vbf_pal, \
765- (self)->vb_surf.vs_flags = (format)->vbf_flags, \
766- (self)->vb_surf.vs_colorkey = (format)->vbf_colorkey, \
767- (self)->vb_codec = (format)->vbf_codec)
758+ /* Initialize format of `self' from `format'
759+ * @return: true: Success
760+ * @return: false: Error: missing palette */
761+ #define __video_buffer_init_format (self , format ) \
762+ ((self)->vb_surf.vs_pal = (format)->vbf_pal, \
763+ (self)->vb_surf.vs_flags = (format)->vbf_flags, \
764+ (self)->vb_surf.vs_colorkey = (format)->vbf_colorkey, \
765+ (((self)->vb_codec = (format)->vbf_codec)->vc_specs.vcs_flags & VIDEO_CODEC_FLAG_PAL) \
766+ ? ((self)->vb_surf.vs_pal != __NULLPTR) \
767+ : ((self)->vb_surf.vs_pal = __NULLPTR, (self)->vb_surf.vs_flags &= ~VIDEO_GFX_F_PALOBJ, 1))
768+ #define __video_buffer_init_domain (self , domain ) \
769+ (void)((self)->vb_domain = (domain))
770+ /* Initialize dimensions of a buffer */
771+ #define __video_buffer_init_dim (self , xdim , ydim ) \
772+ (void)((self)->vb_xdim = (xdim), (self)->vb_ydim = (ydim))
773+ /* Initialize format+domain+dim for a subregion buffer */
774+ #define __video_buffer_init_subregion (self , parent_surface , parent_buffer , rect ) \
775+ (void)((self)->vb_surf.vs_pal = (parent_surface)->vs_pal, \
776+ (self)->vb_surf.vs_flags = (parent_surface)->vs_flags, \
777+ (self)->vb_surf.vs_colorkey = (parent_surface)->vs_colorkey, \
778+ (self)->vb_codec = (parent_buffer)->vb_codec, \
779+ (self)->vb_domain = (parent_buffer)->vb_domain, \
780+ __video_buffer_init_dim(self, (rect)->vcr_xdim, (rect)->vcr_ydim))
781+ /* Initialize operators of a buffer */
782+ #define __video_buffer_init_ops (self , ops ) \
783+ (void)((self)->vb_ops = (ops))
768784#ifdef __INTELLISENSE__
769785#define __video_buffer_init_common (self ) ((self)->vb_surf.vs_buffer = (self))
770786#define __video_buffer_fini_common (self ) (void)((self)->vb_surf.vs_buffer = (self))
771787#else /* __INTELLISENSE__ */
772788#define __video_buffer_init_common (self ) \
773789 (!((self)->vb_surf.vs_flags & VIDEO_GFX_F_PALOBJ) || \
774790 (video_palette_incref((self)->vb_surf.vs_pal), 0), \
775- video_codec_incref((self)->vb_codec), (self)->vb_surf.vs_buffer = (self))
791+ video_codec_incref((self)->vb_codec), \
792+ (self)->vb_refcnt = 1, (self)->vb_surf.vs_buffer = (self))
776793#define __video_buffer_fini_common (self ) \
777794 (void)(__hybrid_assert((self)->vb_surf.vs_buffer == (self)), \
778795 video_codec_decref((self)->vb_codec), \
0 commit comments